Как выполнять поиск по нескольким полям в Elastic Search через клиент Java высокого уровня для отдыха

Я новичок в эластичном поиске. Успешно реализован API поиска документов для сопоставления одного поля, как показано ниже:

SearchRequest searchRequest = new SearchRequest(indexName);

//Single field match, only for documentId
QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("documentId", documentId); 

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(matchQueryBuilder);
searchRequest.source(sourceBuilder);

SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

Я хочу фильтровать данные, используя несколько полей в одном API, например, нужно добавить больше фильтров в вышеуказанный API в соответствии с приведенным ниже условием:

documentNumber > 66 &&  (documentCreatedDate >= date1 && documentCreatedDate <= date2) && documentName like "%test%"

Кто-нибудь может помочь, как применить все эти фильтры в одном SearchRequest?


person Dev Chauhan    schedule 18.06.2020    source источник


Ответы (1)


Вы можете использовать rangeQuery как указано в документах:

QueryBuilders.rangeQuery("documentNumber")                                             
    .gte(66); 
QueryBuilders.rangeQuery("documentCreatedDate")                                             
    .gte(date1)
    .lt(date2); 

Для шаблонов вы можете использовать wildcardQuery:

wildcardQuery(
        "documentName",                                              
        patternString); 

Из Документов:
найти документы, в которых указанное поле содержит термины, соответствующие указанному шаблону, где шаблон поддерживает односимвольные подстановочные знаки (?) и многосимвольные подстановочные знаки (*).

Чтобы применить несколько фильтров в одном запросе, см. этот ответ.

person ProGamer    schedule 18.06.2020