繁体   English   中英

elasticsearch 中匹配与术语查询的性能?

[英]Performance of match vs term query in elasticsearch?

我在我的项目中使用了很多match查询。 现在,我刚刚在 Elasticsearch 遇到了term查询。如果指定了查询的关键字,术语查询似乎更快。 现在我有一个问题.. 我应该重构我的代码(很多)并使用术语而不是匹配吗? 使用 term 的性能比 match 好多少?

在我的查询中使用术语:

main_query["query"]["bool"]["must"].append({"term":{object[..]:object[...]}})

在我的查询中使用匹配查询:

main_query["query"]["bool"]["must"].append({"match":{object[..]:object[...]}})

Elastic 出于显而易见的原因(分析,!)不鼓励对text字段使用term查询,但是如果您知道您需要查询keyword字段(未分析,!),对于term/terms查询肯定是 go 而不是match ,因为match query 除了分析输入之外还做了很多事情,并且最终还是会执行一个term查询,因为它注意到查询的字段是keyword字段。

据我所知,当您使用匹配查询时,这意味着您的字段被映射为“文本”并且您使用了分析器。 这样,您的索引词将生成标记,当您通过分析器运行查询 go 时,将为每个标记建立对应关系。

Term会做精确匹配,即不通过任何分析器 go ,它会在倒排索引中寻找确切的term。

正因为如此,我相信不通过分析器,Term 会更快。 我使用术语匹配来搜索关键字,如类别、标签,以及使用分析器没有意义的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM