elasticsearch query_string类型的查询需要很长时间才能响应,原因是什么?

ruyhziif  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(152)

我有一个使用query_string类型查询的ES查询。在一个集群中,它立即返回,而在另一个集群中,它需要30秒。它们之间有什么不同?据我所知,两者都是索引。
示例查询字符串:*1073917897* OR *1074016666* OR *1074210535* OR *1074210522* OR *1074146059* OR *1074176205* OR *1073894784* OR *1074171218* OR *1074296680* OR *1074146052* OR *1074011547* OR *1074260323*我知道这不是一个很好的查询,但同样,在一个集群中,它几乎立即响应(0.3秒),而在另一个集群中,它的响应时间超过30秒。速度较快的集群比速度较慢的集群(30M)拥有更多的文档(40M)

htzpubme

htzpubme1#

以下是调优query_string搜索速度的一些最佳实践

允许在单词开头使用通配符(例如“ing”)是非常麻烦的,因为需要检查索引中的所有术语,以防它们匹配。可以通过将allow_leading_wildcard设置为false来禁用前导通配符。https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html
通配符搜索可以在单个术语上运行,使用?替换单个字符,
替换零个或多个字符:
请注意,通配符查询可能会使用大量内存,并且性能非常差--试想一下,需要查询多少项才能匹配查询字符串“a* b* c*”。  

Pure wildcards \* are rewritten to exists queries for efficiency. As a consequence, the wildcard "field:*" would match documents with an empty value like the following:

{
  "field": ""
}
... and would not match if the field is missing or set with an explicit null value like the following:

{
  "field": null
}

字符串
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-wildcard

相关问题