为什么在Elasticsearch“词条查询”中,不同的“滚动”时间所消耗的时间如此不同?

时间:2019-04-24 14:02:14

标签: java elasticsearch

在elasticsearch中,我使用了术语查询来搜索一些条目。但是,当搜索结果很大(大约4700个条目)时,“术语查询”会花费太多时间(大约8分钟)。同时,在不同批次的滚动中,所消耗的时间差异很大。我创建一个折线图以显示差异。图表的x轴是 scroll 的数量(0是第一次运行滚动)。 y轴是消耗的时间。

enter image description here

为什么弹性搜索“词条查询”中的“滚动”时间不同时所消耗的时间如此不同?

我的文档看起来像

{
    "id": "doc1"
    "text": "AAAAABBBBHHHHHKAAAAAAAAAAUUUUUKAAAAAAAAAAAK"
}

文本字段具有一个分析器,该分析器将字母 K

后的字符串分割开

我想搜索所有包含术语 AAAAABBBBHHHHH 的文档,而我的Java搜索代码是

SearchResponse response = esClient.prepareSearch("my_index")
                .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)
                .setScroll(new TimeValue(60_000))
                .setQuery(QueryBuilders.matchPhraseQuery("text", "AAAAABBBBHHHHHK"))
                .setSize(100)
                .get();
do {
            for (SearchHit hit : response.getHits().getHits()) {
                 ......
            }
            response = esClient.prepareSearchScroll(response.getScrollId())
                    .setScroll(new TimeValue(60_000))
                    .get();
        } while (response.getHits().getHits().length != 0);

此外,我还想知道是否有任何方法可以优化搜索效果以减少搜索时间?

注意:

  • elasticsearch版本:6.6.1
  • elasticsearch jvm配置
  • 索引分片:1个分片,无副本,分片大小为74GB(当前,我只有一台服务器)
-Xms4g
-Xmx4g

0 个答案:

没有答案