【问题标题】:Elasticsearch performance difference between ‘must’ and ‘must_not’“must”和“must_not”之间的 Elasticsearch 性能差异
【发布时间】:2020-03-28 20:26:05
【问题描述】:

我想知道使用must 子句和must_not 之间的性能差异。 我从他们两个那里得到了不同的时间尝试。 假设我有 10 个组,我想让用户可以访问 5 个组,而排除 5 个组。 所以,我有两种使用查询的方法:

我可以在布尔查询中使用must 子句,然后执行must: ['1', '2' ,'3', '4', '5']。 我可以再次在布尔查询中使用must_not 子句,然后执行must_not:['6', '7', '8', '9', '10']

我在这里没有提供很多细节,因为我只是想更多地了解使用这两个术语在性能方面的差异。 我在 ES 文档中读到了布尔查询,它说在must_not 子句中忽略了评分,尽管我还没有理解如何在 Lucene 索引中执行评分。 但我得到了一些时间差异,must_notmust 花费的时间更长,并且很想发帖。

注意:目前使用,Elasticsearch 版本:2.4.4,暂时无法升级。 谁能解释一下区别或详细解释这两个条款? 接受任何类型的建议和答案。 提前致谢。

【问题讨论】:

  • 您有多少个文档,它们是否均匀分布在您的 10 个组中?如果不是,您认为分布是什么样的?

标签: performance elasticsearch elasticsearch-2.4


【解决方案1】:

must 子句可能更有效,因为它可以利用倒排索引。

内部实现更像

If _searched_keyword_ in inverted_hash
THEN RETRIEVE inverted_hash[_searched_keyword_ ]

must_not 成本更高,因为倒排索引没有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2012-05-26
    • 2013-09-02
    • 2014-03-15
    • 2010-12-07
    • 2017-06-05
    • 2011-12-03
    相关资源
    最近更新 更多