了解bool过滤器

时间:2015-04-27 22:48:31

标签: elasticsearch

根据http://jsfiddle.net/v9kze7th/的elasticsearch doc,bool过滤器可以如下:

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

在含义上,它等同于以下逻辑操作:

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

这是对的吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

正如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))