在elasticsearch中,我使用了术语查询来搜索一些条目。但是,当搜索结果很大(大约4700个条目)时,“术语查询”会花费太多时间(大约8分钟)。同时,在不同批次的滚动中,所消耗的时间差异很大。我创建一个折线图以显示差异。图表的x轴是 scroll 的数量(0是第一次运行滚动)。 y轴是消耗的时间。
为什么弹性搜索“词条查询”中的“滚动”时间不同时所消耗的时间如此不同?
我的文档看起来像
{
"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);
此外,我还想知道是否有任何方法可以优化搜索效果以减少搜索时间?
注意:
-Xms4g
-Xmx4g