Search in sources :

Example 26 with Query

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

the class MemberSearchQueryRepository method findByMatchesDescription.

/**
 * 일반적으로 원하는 description이 매칭되는 것들에 맞게 score 계산해서 찾아준다.
 */
public List<MemberDocument> findByMatchesDescription(String description, Pageable pageable) {
    Criteria criteria = Criteria.where("description").matches(description);
    Query query = new CriteriaQuery(criteria).setPageable(pageable);
    SearchHits<MemberDocument> search = operations.search(query, MemberDocument.class);
    return search.stream().map(SearchHit::getContent).collect(Collectors.toList());
}
Also used : Query(org.springframework.data.elasticsearch.core.query.Query) CriteriaQuery(org.springframework.data.elasticsearch.core.query.CriteriaQuery) MemberDocument(com.example.elasticsearch.member.domain.MemberDocument) CriteriaQuery(org.springframework.data.elasticsearch.core.query.CriteriaQuery) Criteria(org.springframework.data.elasticsearch.core.query.Criteria)

Example 27 with Query

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

the class MemberSearchQueryRepository method findByContainsDescription.

/**
 * 형태소 분석기 nori를 사용할 경우 주의해야한다.
 * MemberDocument의 description이 text타입이기 때문에 노리 분석기가 토큰화 시키는데
 * member.json 파일에 보면 안녕하세요 ~~ 이런식으로 되어있는데 토큰화 될 때 안녕, 하, 시, 어요 이렇게 토큰화된다.
 * 따라서 요청 description에 "안녕하세요"로 들어올 경우 쿼리가 *안녕하세요*로 나가기 때문에 찾을 수 없게 된다.
 * 따라서 Contains를 사용할 경우 노리 분석기가 어떻게 동작하는지 잘 인지하고 사용해야 한다.
 *  contains는 앞쪽에 *가 붙어서 쿼리 성능을 급격히 저하시키기 때문에 웬만하면 사용하지 않는 것이 좋다.
 *
 *  nori 형태소가 어떻게 토큰화 하여 저장하는지는 키바나 콘솔에서 아래와 같이 검색하보면 어떤 식으로 토큰화 되는지 확인 가능
 *  {
 *   "tokenizer": "nori_tokenizer",
 *   "text": "원하는 내용"
 * }
 */
public List<MemberDocument> findByContainsDescription(String description, Pageable pageable) {
    Criteria criteria = Criteria.where("description").contains(description);
    Query query = new CriteriaQuery(criteria).setPageable(pageable);
    SearchHits<MemberDocument> search = operations.search(query, MemberDocument.class);
    return search.stream().map(SearchHit::getContent).collect(Collectors.toList());
}
Also used : Query(org.springframework.data.elasticsearch.core.query.Query) CriteriaQuery(org.springframework.data.elasticsearch.core.query.CriteriaQuery) MemberDocument(com.example.elasticsearch.member.domain.MemberDocument) CriteriaQuery(org.springframework.data.elasticsearch.core.query.CriteriaQuery) Criteria(org.springframework.data.elasticsearch.core.query.Criteria)

Example 28 with Query

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

the class ConferenceCustomRepositoryImpl method findBySomeCustomImplementation.

@Override
public SearchPage<Conference> findBySomeCustomImplementation(String name, Pageable page) {
    Query query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchQuery("name", name)).build();
    SearchHits<Conference> searchHits = operations.search(query, Conference.class);
    return SearchHitSupport.searchPageFor(searchHits, page);
}
Also used : Query(org.springframework.data.elasticsearch.core.query.Query) NativeSearchQueryBuilder(org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder)

Example 29 with Query

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

the class AbstractReactiveElasticsearchRepositoryQuery method execute.

private Object execute(ElasticsearchParameterAccessor parameterAccessor) {
    ResultProcessor processor = queryMethod.getResultProcessor().withDynamicProjection(parameterAccessor);
    Query query = createQuery(new ConvertingParameterAccessor(elasticsearchOperations.getElasticsearchConverter(), parameterAccessor));
    if (queryMethod.hasAnnotatedHighlight()) {
        query.setHighlightQuery(queryMethod.getAnnotatedHighlightQuery());
    }
    Class<?> targetType = processor.getReturnedType().getTypeToRead();
    String indexName = queryMethod.getEntityInformation().getIndexName();
    IndexCoordinates index = IndexCoordinates.of(indexName);
    ReactiveElasticsearchQueryExecution execution = getExecution(parameterAccessor, new ResultProcessingConverter(processor));
    return execution.execute(query, processor.getReturnedType().getDomainType(), targetType, index);
}
Also used : Query(org.springframework.data.elasticsearch.core.query.Query) RepositoryQuery(org.springframework.data.repository.query.RepositoryQuery) ResultProcessingConverter(org.springframework.data.elasticsearch.repository.query.ReactiveElasticsearchQueryExecution.ResultProcessingConverter) ResultProcessor(org.springframework.data.repository.query.ResultProcessor) IndexCoordinates(org.springframework.data.elasticsearch.core.mapping.IndexCoordinates)

Example 30 with Query

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

the class ReactiveElasticsearchTemplate method multiGet.

@Override
public <T> Flux<MultiGetItem<T>> multiGet(Query query, Class<T> clazz, IndexCoordinates index) {
    Assert.notNull(index, "Index must not be null");
    Assert.notNull(clazz, "Class must not be null");
    Assert.notNull(query, "Query must not be null");
    DocumentCallback<T> callback = new ReadDocumentCallback<>(converter, clazz, index);
    MultiGetRequest request = requestFactory.multiGetRequest(query, clazz, index);
    return // 
    Flux.from(execute(client -> client.multiGet(request))).map(// 
    DocumentAdapters::from).flatMap(multiGetItem -> // 
    multiGetItem.isFailed() ? // 
    Mono.just(MultiGetItem.of(null, multiGetItem.getFailure())) : callback.toEntity(multiGetItem.getItem()).map(// 
    (T item) -> MultiGetItem.of(item, multiGetItem.getFailure())));
}
Also used : DefaultReactiveClusterOperations(org.springframework.data.elasticsearch.core.cluster.DefaultReactiveClusterOperations) QueryBuilders(org.elasticsearch.index.query.QueryBuilders) ElasticsearchPersistentEntity(org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity) PersistentPropertyAccessor(org.springframework.data.mapping.PersistentPropertyAccessor) BulkFailureException(org.springframework.data.elasticsearch.BulkFailureException) DeleteRequest(org.elasticsearch.action.delete.DeleteRequest) IndexRequest(org.elasticsearch.action.index.IndexRequest) ReindexRequest(org.springframework.data.elasticsearch.core.reindex.ReindexRequest) VersionInfo(org.springframework.data.elasticsearch.support.VersionInfo) MappingElasticsearchConverter(org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter) Map(java.util.Map) RoutingResolver(org.springframework.data.elasticsearch.core.routing.RoutingResolver) IndicesOptions(org.elasticsearch.action.support.IndicesOptions) DeleteByQueryRequest(org.elasticsearch.index.reindex.DeleteByQueryRequest) ElasticsearchPersistentProperty(org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty) GetRequest(org.elasticsearch.action.get.GetRequest) ReactiveEntityCallbacks(org.springframework.data.mapping.callback.ReactiveEntityCallbacks) IndexCoordinates(org.springframework.data.elasticsearch.core.mapping.IndexCoordinates) UpdateQuery(org.springframework.data.elasticsearch.core.query.UpdateQuery) BulkItemResponse(org.elasticsearch.action.bulk.BulkItemResponse) ReactiveClusterOperations(org.springframework.data.elasticsearch.core.cluster.ReactiveClusterOperations) Collection(java.util.Collection) BulkResponse(org.elasticsearch.action.bulk.BulkResponse) IndexQuery(org.springframework.data.elasticsearch.core.query.IndexQuery) Collectors(java.util.stream.Collectors) List(java.util.List) Version(org.elasticsearch.Version) NonNull(org.springframework.lang.NonNull) LogFactory(org.apache.commons.logging.LogFactory) SearchDocument(org.springframework.data.elasticsearch.core.document.SearchDocument) ApplicationContextAware(org.springframework.context.ApplicationContextAware) Document(org.springframework.data.elasticsearch.core.document.Document) ReactiveBeforeConvertCallback(org.springframework.data.elasticsearch.core.event.ReactiveBeforeConvertCallback) ReactiveAfterSaveCallback(org.springframework.data.elasticsearch.core.event.ReactiveAfterSaveCallback) SeqNoPrimaryTerm(org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm) Suggest(org.springframework.data.elasticsearch.core.suggest.response.Suggest) GetResult(org.elasticsearch.index.get.GetResult) Tuple2(reactor.util.function.Tuple2) MultiGetRequest(org.elasticsearch.action.get.MultiGetRequest) HashMap(java.util.HashMap) Query(org.springframework.data.elasticsearch.core.query.Query) SearchRequest(org.elasticsearch.action.search.SearchRequest) BulkOptions(org.springframework.data.elasticsearch.core.query.BulkOptions) EntityReader(org.springframework.data.convert.EntityReader) SearchDocumentResponse(org.springframework.data.elasticsearch.core.document.SearchDocumentResponse) WriteRequest(org.elasticsearch.action.support.WriteRequest) DocumentAdapters(org.springframework.data.elasticsearch.core.document.DocumentAdapters) ByQueryResponse(org.springframework.data.elasticsearch.core.query.ByQueryResponse) ElasticsearchConverter(org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter) ReactiveAfterLoadCallback(org.springframework.data.elasticsearch.core.event.ReactiveAfterLoadCallback) IndexResponse(org.elasticsearch.action.index.IndexResponse) Nullable(org.springframework.lang.Nullable) UpdateResponse(org.springframework.data.elasticsearch.core.query.UpdateResponse) UpdateByQueryRequest(org.elasticsearch.index.reindex.UpdateByQueryRequest) BulkByScrollResponse(org.elasticsearch.index.reindex.BulkByScrollResponse) Publisher(org.reactivestreams.Publisher) Mono(reactor.core.publisher.Mono) UpdateRequest(org.elasticsearch.action.update.UpdateRequest) BeansException(org.springframework.beans.BeansException) SimpleElasticsearchMappingContext(org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext) ReactiveElasticsearchClient(org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient) DocWriteResponse(org.elasticsearch.action.DocWriteResponse) ApplicationContext(org.springframework.context.ApplicationContext) SuggestBuilder(org.elasticsearch.search.suggest.SuggestBuilder) Flux(reactor.core.publisher.Flux) HttpStatus(org.springframework.http.HttpStatus) AdaptibleEntity(org.springframework.data.elasticsearch.core.EntityOperations.AdaptibleEntity) ReactiveAfterConvertCallback(org.springframework.data.elasticsearch.core.event.ReactiveAfterConvertCallback) NoSuchIndexException(org.springframework.data.elasticsearch.NoSuchIndexException) DefaultRoutingResolver(org.springframework.data.elasticsearch.core.routing.DefaultRoutingResolver) Log(org.apache.commons.logging.Log) NativeSearchQueryBuilder(org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder) BulkRequest(org.elasticsearch.action.bulk.BulkRequest) ReindexResponse(org.springframework.data.elasticsearch.core.reindex.ReindexResponse) UncategorizedElasticsearchException(org.springframework.data.elasticsearch.UncategorizedElasticsearchException) Assert(org.springframework.util.Assert) MultiGetRequest(org.elasticsearch.action.get.MultiGetRequest)

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