在Udemy教程中,我在这里遇到此查询:
{ "query": { "bool": {
"must": {"match": {"genre": "Sci-Fi"}},
"must_not": {"match": {"title": "trek"}},
"filter:" {"range": {"year": {"gte": 2010, "lt": 2015}}}
}}}
我想知道是否有可能对其进行优化?我在想两种可能的方式:
最佳答案
关于1:
将genre
匹配项移至过滤器上下文可能会使其稍微加快一点(尽管这取决于许多其他因素),但是您将失去排名,这对您可能并不重要。最后,如果排名很重要,则使用must
;如果不那么重要,则使用filter
,并且您的唯一目标是匹配文档或不提供某些条件。
而且,使用type关键字只会使您获得“完全匹配”的语义,这可能是您想要的...取决于您创建查询的方式(用户输入或受控选择列表)...
关于2:must_not
是already in a filter context,因此它不会比您已经看到的简单。过滤器上下文由filter
+ must_not
组成。
我要添加的最后一件事是,当有人询问性能优化时,我总是添加:Premature optimization is the root of all evil,所以只有在您实际看到性能问题时才这样做,从来没有。
关于elasticsearch - Elasticsearch:使用filter和constant_score优化查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54573430/