elasticsearch - Elasticsearch:使用filter和constant_score优化查询吗?

标签 elasticsearch

在Udemy教程中,我在这里遇到此查询:

{ "query": { "bool": {
    "must": {"match": {"genre": "Sci-Fi"}},
    "must_not": {"match": {"title": "trek"}},
    "filter:" {"range": {"year": {"gte": 2010, "lt": 2015}}}
}}}

我想知道是否有可能对其进行优化?我在想两种可能的方式:
  • 将“类型”放在过滤器上下文中。但是电影可能具有多种流派,所以我不确定使用type关键字和filter-term是否可以在那里工作。
  • 直接将“must_not”放在过滤器上下文中(不带 bool(boolean) 值)将不起作用,因为据我所知,过滤器不允许“过滤掉”,而只能“过滤保留的内容”。但是,如果将must_not包装在constant_score或filter-bool中,查询的性能会更好吗?还是ES会自动进行此类优化?我只是不明白为什么must_not在查询中而不是首先过滤上下文。某些东西不能部分匹配吗,从而只能将分数降低一定程度?
  • 最佳答案

    关于1:

    genre匹配项移至过滤器上下文可能会使其稍微加快一点(尽管这取决于许多其他因素),但是您将失去排名,这对您可能并不重要。最后,如果排名很重要,则使用must;如果不那么重要,则使用filter,并且您的唯一目标是匹配文档或不提供某些条件。

    而且,使用type关键字只会使您获得“完全匹配”的语义,这可能是您想要的...取决于您创建查询的方式(用户输入或受控选择列表)...

    关于2:
    must_notalready 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/

    相关文章:

    elasticsearch - 嵌套对象聚合(使用 Kibana)

    c# - ElasticSearch 和 Nest 过滤不起作用

    elasticsearch - 在Elasticsearch中返回不同的值

    elasticsearch - 我可以再次将kibana的结果放到elasticsearch吗?

    elasticsearch - 聚合 "LastUpdated"属性或 _timestamp

    django - 查询 ElasticSearch 以将空字符串排在最后

    elasticsearch - 奇迹插件找不到.properties文件

    performance - Elasticsearch .NET Nest API与HTTP RESTful API性能

    java - 获取所有记录,包括特定字段

    Elasticsearch理解线程池