带有AND运算符的Elasticsearch bool过滤器

时间:2015-06-03 20:36:37

标签: elasticsearch elastica

  1. 我正在尝试编写一个匹配多个名称的查询 下面的查询很好,但它不完全匹配,例如它也给出 名称为“X A”或“B Y”的结果,我想要名称 确切的A或准确B.任何人都可以告诉我,我做错了什么。
  2. 也可以匹配多个字段,例如Name = A或Surname = A或Name = b或Surname = b

     {
        "filter": {
                    "bool": {
                      "should": [
                        {
                          "term": {
                            "Name": "A"
                          }
                        },{
                          "term": {
                            "Name": "B"
                          }
                        }
                      ]
                    }
                  },"sort": [
                    {
                      "Pub": {
                        "Rank": "desc"
                      }
                    }
                  ]
                }
    

1 个答案:

答案 0 :(得分:0)

在布尔查询中,must表示所有查询必须求值为true(因此就像逻辑AND),而should表示至少有一个必须求值为true(因此就像逻辑OR)

  1. 要与名称完全匹配,您需要使用Keyword analyzer。这将停止在空格上标记名称,因此“William RIker”将被索引为(关键字分析器)[“William Riker”]或(默认分析器)[“William”,“Riker”]。在默认情况下,它将匹配“William”或“Riker”的术语查询。在关键字的情况下,它只匹配全名。

  2. 要做你想做的事,“Name = A或Surname = A或Name = b或Surname = b”那么你可以制作4个条款。

  3.     {  
           "bool":{  
              "should":[  
                 {  
                    "term":{  
                       "Name":"A"
                    }
                 },
                 {  
                    "term":{  
                       "Name":"B"
                    }
                 },
                 {  
                    "term":{  
                       "Surname":"A"
                    }
                 },
                 {  
                    "term":{  
                       "Surname":"B"
                    }
                 }
              ]
           }
        }