根据http://www.elastic.co/guide/en/elasticsearch/guide/master/combining-filters.html上的elasticsearch doc ,bool过滤器可以是以下内容:
{
"bool" : {
"must" : [
A,
B
],
"should" : [
C,
D
],
"must_not" : [
E,
F
],
}
}
Run Code Online (Sandbox Code Playgroud)
在意义上,它等同于以下逻辑操作:
A and B and (C or D) and (not E) and (not F)
Run Code Online (Sandbox Code Playgroud)
它是否正确?
谢谢!
正如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))
Run Code Online (Sandbox Code Playgroud)
就布尔逻辑而言,它与它不是同一回事的原因(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))
Run Code Online (Sandbox Code Playgroud)