根据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)
这是对的吗?
谢谢!
答案 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))