【问题标题】:ElasticSearch post_filter Java API issueElasticSearch post_filter Java API问题
【发布时间】:2020-05-26 23:05:13
【问题描述】:

我正在尝试使用 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();

任何帮助将不胜感激..

【问题讨论】:

  • 什么是pageSize和fromHit?
  • 这是一种返回点击量页面并查看不同大小的“下一页”的方法。
  • 下一行“String dtName = getDateTimeAttributeName(appList,radarManager)”获取要查询日期范围的索引的字段名称。

标签: java elasticsearch kibana


【解决方案1】:

找到了解决方案.. 很抱歉,当它只是一个简单的缺少括号的帖子时.. 应该是

if (dateSort && (appList.size() == 1)) {

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 2019-09-26
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2019-02-15
    相关资源
    最近更新 更多