2016-05-30 115 views
0

我有一個Elasticsearch回購和應用程序,爲我們稱之爲「資產」創建文檔。我需要阻止用戶使用相同的「標題」創建「資產」。Elasticsearch匹配確切項

當用戶嘗試創建「資產」時,我正在使用標題查詢回購,並且如果存在匹配,則向用戶顯示錯誤消息。

我的問題是,當我查詢標題時,我得到了多個結果(對於類似的匹配)。

這是我的查詢到目前爲止:

GET assets-1/asset/_search 
{ 
    "query": { 
    "match": { 
     "title": { 
     "query": "test", 
     "operator": "and" 
     } 
    } 
    } 
} 

我有很多頭銜記載:「測試1」,「測試2」,「測試BLA」,只有一個標題爲「測試」。

但我得到了上述所有。

是否有任何條件或屬性,我必須添加到查詢,所以我會完全匹配的術語?

回答

0

您的標題字段可能會被分析,因此test令牌將匹配包含該令牌的任何標題。

爲了實現完全匹配,您需要有一個not_analyzed字段並對其執行term查詢。

您需要將title領域的映射改成這樣:

curl -XPUT localhost:9200/assets-1/_mapping/asset -d '{ 
    "asset": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
      } 
     } 
     } 
    } 
}' 

然後,你需要重新索引數據,然後你就可以運行完全匹配的查詢是這樣的:

curl -XPOST localhost:9200/assets-1/asset/_search -d '{ 
    "query": { 
     "term": { 
     "title.raw": "test" 
     } 
    } 
}' 
+0

謝謝你+ Val,該領域已經「not_analyzed」,但「.raw」部分做到了。 – Yatiac

+0

太棒了,很高興你知道了! – Val

+0

還有一件事,無論如何要讓它不區分大小寫? – Yatiac