我尝试使用 ElasticSearch Java API 执行查询字符串查询,然后根据结果集中的字段按日期范围限制结果。当我使用 Kibana 进行测试时,我得到了 77 次点击,但是当我尝试使用 Java API 执行相同的操作时,我得到了“0”次点击。
这是用 Kibana 编写的查询:
GET /enyo_cad/_search
{
"from": 0, "size": 20,
"query": {
"query_string": {
"query": "smith",
"lenient": true
}
},
"post_filter": {
"range": {
"cadIncident.dateTimeReceived": {
"gte": "2014-01-01T00:00:00",
"lte": "2016-01-01T00:00:00"
}
}
},
"highlight": {
"fields": {
"*": {}
},
"require_field_match": false
},
"sort": [
{ "cadIncident.dateTimeReceived": { "order": "desc" }},
{ "_score": { "order": "desc" }}
]
}
这是我的 Java 代码:
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.queryStringQuery(searchString)
.lenient(Boolean.TRUE)
.analyzeWildcard(Boolean.TRUE)
);
searchSourceBuilder.from(fromHit);
searchSourceBuilder.size(pageSize);
if (startDate != null && endDate != null) {
String dtName = getDateTimeAttributeName(appList, radarManager);
searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(dtName)
.gte(startDate)
.lte(endDate));
}
// This section will sort the results IF there is only 1 application module selected OTHERWISE default revelvance score based sorting will continue.
if (dateSort && appList.size() == 1) {
searchSourceBuilder.sort(getDateTimeAttributeName(appList, radarManager), SortOrder.DESC);
searchSourceBuilder.sort("_score", SortOrder.DESC);
}
HighlightBuilder highlightBuilder = new HighlightBuilder();
HighlightBuilder.Field highlightFields = new HighlightBuilder.Field("*");
highlightFields.highlighterType("unified"); //highlighter type unified is default https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html
highlightBuilder.field(highlightFields);
searchSourceBuilder.highlighter(highlightBuilder);
searchRequest.source(searchSourceBuilder);
searchRequest.indices(indexFilter);
searchResponse = restClient.search(searchRequest, requestOptions);
SearchHits hits = searchResponse.getHits();
任何帮助将不胜感激..
最佳答案
找到了解决方案..很抱歉这篇文章只是简单地缺少一对括号..应该是
if (dateSort && (appList.size() == 1)) {
关于java - ElasticSearch post_filter Java API问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61901329/