一尘不染

了解布尔过滤器

elasticsearch

根据http://www.elastic.co/guide/zh-cn/elasticsearch/guide/master/combining-
filters.html上的elasticsearch文档,布尔过滤器可以是以下内容:

{
   "bool" : {
      "must" :     [
          A,
          B
       ],
      "should" :   [
          C,
          D
       ],
      "must_not" : [
          E,
          F
       ],
   }
}

在含义上,它等效于以下逻辑运算:

A and B and (C or D) and (not E) and (not F)

这样对吗?

谢谢!


阅读 275

收藏
2020-06-22

共1个答案

一尘不染

正如Andrei在评论中指出的,这是对bool 过滤器 的正确理解:

  • must 可以翻译成 (A and B)
  • should 可以翻译成 (C or D)
  • must_not 可以翻译成 ((not E) and (not F))

它们中的每一个都是独立的操作,但是可以完全按照您的显示进行组合。

(A and B) and (C or D) and ((not E) and (not F))

就布尔逻辑而言,之所以与众不同,(not (E and F))是因为与说相同((not E) or (not F))。如果E与说相同field == 5并且F与说相同field == 6,那么这与相同field != 5 or field != 6,这将永远是正确的!

这导致以不同的方式看待它:

  • must_not 可以翻译成 (not (E or F))

换句话说,如果任何过滤器不匹配,则文档不匹配。这导致合并版本的稍微简化的版本:

(A and B) and (C or D) and (not (E or F))
2020-06-22