bool过滤器的理解

Understanding of bool filter

根据 http://www.elastic.co/guide/en/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)

这是正确的吗?

谢谢!

正如 Andrei 在评论中指出的那样,这是对 bool filter:

的正确理解
  • 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))