我在我的项目中使用了很多match查询。现在,我刚刚在Elasticsearch中遇到了term查询。如果指定了查询的关键字,那么术语查询似乎会更快一些。现在我有个问题..。我应该重构我的代码(很多)并使用术语而不是匹配吗?使用术语比匹配更好的性能是多少?
在查询中使用术语:
main_query["query"]["bool"]["must"].append({"term":{object[..]:object[...]}})在查询中使用匹配查询:
main_query["query"]["bool"]["must"].append({"match":{object[..]:object[...]}})发布于 2022-04-12 12:18:41
弹性阻止使用term查询text字段用于明显原因 (分析!!),但如果您知道需要查询keyword字段(而不是分析!!),则肯定会使用term/terms查询而不是match查询,因为match查询除了分析输入之外做了更多的事情,并且最终会执行term查询,因为它注意到被查询的字段是keyword字段。
发布于 2022-04-12 12:28:53
据我所知,当您使用match查询时,它意味着您的字段被映射为"text“,并且使用了分析器。这样,您的索引单词将生成令牌,当您运行查询时,您将通过一个分析器,并对每个标记进行对应。
术语会做精确的匹配,也就是说,它不会经过任何分析器,它会在倒排索引中寻找确切的术语。
正因为如此,我相信通过不通过分析器,术语是更快的。我使用术语匹配搜索关键字,如类别,标签,没有意义的东西使用分析器。
https://stackoverflow.com/questions/71841934
复制相似问题