java - ElasticSearch post_filter Java API问题

标签 java elasticsearch kibana

我尝试使用 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/

相关文章:

Java Selenium 触发禁用空文本字段上的提交按钮

java - 修改 SlidingTabStrip 中的 Indicator 颜色

ruby-on-rails - 如何在 Elasticsearch 中查询数组元素

datetime - Kibana的日期时间关闭一个月

elasticsearch - 基巴纳从@message中提取包含JSON的字段

Java 人体工程学 : how are defaults calculated?

java - 使用 SWIG 生成 Java 接口(interface)

c# - 如何在 ElasticSearch 中设置索引的 TTL

python - 使用 Elasticsearch 后端在 Django Haystack 中启用同义词

elasticsearch - 如何在Kibana中搜索嵌套键