Search in sources :

Example 11 with Query

use of org.springframework.data.elasticsearch.core.query.Query in project spring-data-elasticsearch by spring-projects.

the class ElasticsearchRestTemplate method multiSearch.

@Override
public <T> List<SearchHits<T>> multiSearch(List<? extends Query> queries, Class<T> clazz, IndexCoordinates index) {
    MultiSearchRequest request = new MultiSearchRequest();
    for (Query query : queries) {
        request.add(requestFactory.searchRequest(query, clazz, index));
    }
    MultiSearchResponse.Item[] items = getMultiSearchResult(request);
    ReadDocumentCallback<T> documentCallback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index);
    SearchDocumentResponseCallback<SearchHits<T>> callback = new ReadSearchDocumentResponseCallback<>(clazz, index);
    List<SearchHits<T>> res = new ArrayList<>(queries.size());
    for (int i = 0; i < queries.size(); i++) {
        res.add(callback.doWith(SearchDocumentResponse.from(items[i].getResponse(), getEntityCreator(documentCallback))));
    }
    return res;
}
Also used : MoreLikeThisQuery(org.springframework.data.elasticsearch.core.query.MoreLikeThisQuery) UpdateQuery(org.springframework.data.elasticsearch.core.query.UpdateQuery) IndexQuery(org.springframework.data.elasticsearch.core.query.IndexQuery) Query(org.springframework.data.elasticsearch.core.query.Query) ArrayList(java.util.ArrayList) MultiSearchRequest(org.elasticsearch.action.search.MultiSearchRequest)

Example 12 with Query

use of org.springframework.data.elasticsearch.core.query.Query in project spring-data-elasticsearch by spring-projects.

the class ElasticsearchRestTemplate method multiSearch.

@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public List<SearchHits<?>> multiSearch(List<? extends Query> queries, List<Class<?>> classes, IndexCoordinates index) {
    Assert.notNull(queries, "queries must not be null");
    Assert.notNull(classes, "classes must not be null");
    Assert.notNull(index, "index must not be null");
    Assert.isTrue(queries.size() == classes.size(), "queries and classes must have the same size");
    MultiSearchRequest request = new MultiSearchRequest();
    Iterator<Class<?>> it = classes.iterator();
    for (Query query : queries) {
        request.add(requestFactory.searchRequest(query, it.next(), index));
    }
    MultiSearchResponse.Item[] items = getMultiSearchResult(request);
    List<SearchHits<?>> res = new ArrayList<>(queries.size());
    Iterator<Class<?>> it1 = classes.iterator();
    for (int i = 0; i < queries.size(); i++) {
        Class entityClass = it1.next();
        ReadDocumentCallback<?> documentCallback = new ReadDocumentCallback<>(elasticsearchConverter, entityClass, index);
        SearchDocumentResponseCallback<SearchHits<?>> callback = new ReadSearchDocumentResponseCallback<>(entityClass, index);
        SearchResponse response = items[i].getResponse();
        res.add(callback.doWith(SearchDocumentResponse.from(response, getEntityCreator(documentCallback))));
    }
    return res;
}
Also used : MoreLikeThisQuery(org.springframework.data.elasticsearch.core.query.MoreLikeThisQuery) UpdateQuery(org.springframework.data.elasticsearch.core.query.UpdateQuery) IndexQuery(org.springframework.data.elasticsearch.core.query.IndexQuery) Query(org.springframework.data.elasticsearch.core.query.Query) ArrayList(java.util.ArrayList) SearchResponse(org.elasticsearch.action.search.SearchResponse) MultiSearchResponse(org.elasticsearch.action.search.MultiSearchResponse) MultiSearchRequest(org.elasticsearch.action.search.MultiSearchRequest)

Example 13 with Query

use of org.springframework.data.elasticsearch.core.query.Query in project spring-data-elasticsearch by spring-projects.

the class RuntimeFieldsIntegrationTests method shouldUseRuntimeFieldFromQueryInSearch.

// #1971
@Test
@DisplayName("should use runtime-field from query in search")
void shouldUseRuntimeFieldFromQueryInSearch() {
    insert("1", "item 1", 13.5);
    insert("2", "item 2", 15);
    Query query = new CriteriaQuery(new Criteria("priceWithTax").greaterThanEqual(16.5));
    RuntimeField runtimeField = new RuntimeField("priceWithTax", "double", "emit(doc['price'].value * 1.19)");
    query.addRuntimeField(runtimeField);
    SearchHits<SomethingToBuy> searchHits = operations.search(query, SomethingToBuy.class);
    assertThat(searchHits.getTotalHits()).isEqualTo(1);
    assertThat(searchHits.getSearchHit(0).getId()).isEqualTo("2");
}
Also used : Query(org.springframework.data.elasticsearch.core.query.Query) CriteriaQuery(org.springframework.data.elasticsearch.core.query.CriteriaQuery) CriteriaQuery(org.springframework.data.elasticsearch.core.query.CriteriaQuery) Criteria(org.springframework.data.elasticsearch.core.query.Criteria) Test(org.junit.jupiter.api.Test) SpringIntegrationTest(org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest) DisplayName(org.junit.jupiter.api.DisplayName)

Example 14 with Query

use of org.springframework.data.elasticsearch.core.query.Query in project spring-data-elasticsearch by spring-projects.

the class SearchAsYouTypeTests method shouldReturnCorrectResultsForTextString.

// DATAES-773
@Test
void shouldReturnCorrectResultsForTextString() {
    // given
    loadEntities();
    // when
    Query query = new NativeSearchQuery(// 
    QueryBuilders.multiMatchQuery(// 
    "test ", "suggest", "suggest._2gram", "suggest._3gram", "suggest._4gram").type(MultiMatchQueryBuilder.Type.BOOL_PREFIX));
    IndexCoordinates index = IndexCoordinates.of("test-index-core-search-as-you-type");
    List<SearchAsYouTypeEntity> result = // 
    operations.search(query, SearchAsYouTypeEntity.class, index).getSearchHits().stream().map(// 
    SearchHit::getContent).collect(Collectors.toList());
    // then
    List<String> ids = result.stream().map(SearchAsYouTypeEntity::getId).collect(Collectors.toList());
    assertThat(ids).containsExactlyInAnyOrder("1", "2");
}
Also used : Query(org.springframework.data.elasticsearch.core.query.Query) IndexQuery(org.springframework.data.elasticsearch.core.query.IndexQuery) NativeSearchQuery(org.springframework.data.elasticsearch.core.query.NativeSearchQuery) NativeSearchQuery(org.springframework.data.elasticsearch.core.query.NativeSearchQuery) IndexCoordinates(org.springframework.data.elasticsearch.core.mapping.IndexCoordinates) Test(org.junit.jupiter.api.Test) SpringIntegrationTest(org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest)

Example 15 with Query

use of org.springframework.data.elasticsearch.core.query.Query in project spring-data-elasticsearch by spring-projects.

the class SearchAsYouTypeTests method shouldReturnCorrectResultsForNumQuery.

// DATAES-773
@Test
void shouldReturnCorrectResultsForNumQuery() {
    // given
    loadEntities();
    // when
    Query query = new NativeSearchQuery(// 
    QueryBuilders.multiMatchQuery(// 
    "5678 ", "suggest", "suggest._2gram", "suggest._3gram", "suggest._4gram").type(MultiMatchQueryBuilder.Type.BOOL_PREFIX));
    IndexCoordinates index = IndexCoordinates.of("test-index-core-search-as-you-type");
    List<SearchAsYouTypeEntity> result = // 
    operations.search(query, SearchAsYouTypeEntity.class, index).getSearchHits().stream().map(// 
    SearchHit::getContent).collect(Collectors.toList());
    // then
    List<String> ids = result.stream().map(SearchAsYouTypeEntity::getId).collect(Collectors.toList());
    assertThat(ids).containsExactlyInAnyOrder("2", "3");
}
Also used : Query(org.springframework.data.elasticsearch.core.query.Query) IndexQuery(org.springframework.data.elasticsearch.core.query.IndexQuery) NativeSearchQuery(org.springframework.data.elasticsearch.core.query.NativeSearchQuery) NativeSearchQuery(org.springframework.data.elasticsearch.core.query.NativeSearchQuery) IndexCoordinates(org.springframework.data.elasticsearch.core.mapping.IndexCoordinates) Test(org.junit.jupiter.api.Test) SpringIntegrationTest(org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest)

Aggregations

Query (org.springframework.data.elasticsearch.core.query.Query)44 Test (org.junit.jupiter.api.Test)22 SpringIntegrationTest (org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest)17 NativeSearchQueryBuilder (org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder)16 IndexCoordinates (org.springframework.data.elasticsearch.core.mapping.IndexCoordinates)15 IndexQuery (org.springframework.data.elasticsearch.core.query.IndexQuery)15 DisplayName (org.junit.jupiter.api.DisplayName)14 ArrayList (java.util.ArrayList)13 List (java.util.List)10 CriteriaQuery (org.springframework.data.elasticsearch.core.query.CriteriaQuery)10 Collectors (java.util.stream.Collectors)9 MoreLikeThisQuery (org.springframework.data.elasticsearch.core.query.MoreLikeThisQuery)9 Nullable (org.springframework.lang.Nullable)9 UpdateQuery (org.springframework.data.elasticsearch.core.query.UpdateQuery)8 QueryBuilders (org.elasticsearch.index.query.QueryBuilders)7 HashMap (java.util.HashMap)6 Map (java.util.Map)6 MultiSearchRequest (org.elasticsearch.action.search.MultiSearchRequest)6 Log (org.apache.commons.logging.Log)5 LogFactory (org.apache.commons.logging.LogFactory)5