2015-06-03 49 views
-1
  1. 我想編寫一個查詢,將匹配多個名稱,下面的查詢該 是好的,但它不是做精確匹配例如,它也給 結果與名「XA」或'BY',我想要名稱是精確的A或確切的B.可以有人告訴我我做錯了什麼。
  2. 而且是有可能匹配像名稱= A或姓= A或多個字段名= B或姓= B與Elasticsearch布爾過濾器和運算符

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

回答

0

在布爾查詢,must裝置的所有查詢必須評估真(所以就像一個邏輯與),並且should意味着至少有一個必須評估爲真(所以就像是一個邏輯OR)。

  1. 要在名稱上有完全匹配,您需要使用Keyword analyzer。這將停止名稱被標記爲空格,所以「威廉RIker」將被索引爲(「關鍵字分析器」)[「威廉Riker」]或(默認分析器)[「威廉」,「Riker」]。在默認情況下,它將匹配「William」或「Riker」的術語查詢。在關鍵字的情況下,它只會匹配全名。

  2. 要做你想做的事,「名字= A或者姓氏= A或者名字= b或者姓氏= b」,那麼你可以做4個應該子句。

 
    { 
     "bool":{ 
      "should":[ 
      { 
       "term":{ 
        "Name":"A" 
       } 
      }, 
      { 
       "term":{ 
        "Name":"B" 
       } 
      }, 
      { 
       "term":{ 
        "Surname":"A" 
       } 
      }, 
      { 
       "term":{ 
        "Surname":"B" 
       } 
      } 
      ] 
     } 
    } 
+0

我試着查詢與''絕,但沒有運氣還是它仍然匹配「威廉」或「裏克」 – Ironman

+0

我的回答你的問題第1部分解釋了爲什麼。 – monkjack

+0

如何更新名稱映射並使其不能分析當前索引? – Ironman