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());
}
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());
}
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);
}
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);
}
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())));
}
Aggregations