我想在彈性搜索來搜索名稱,在elasticSearch,無法搜索名稱以特殊字符「 - 」
考慮名稱KANAL - 坎南
通常我們用* na
搜索的名字,我試過像這樣搜索 -
"/index/party_details/_search?size=200&from=0&q=(first_name_v:kanal-*)"
此結果爲零記錄。
我想在彈性搜索來搜索名稱,在elasticSearch,無法搜索名稱以特殊字符「 - 」
考慮名稱KANAL - 坎南
通常我們用* na
搜索的名字,我試過像這樣搜索 -
"/index/party_details/_search?size=200&from=0&q=(first_name_v:kanal-*)"
此結果爲零記錄。
-
是一個特殊字符需要轉義從字面上搜索:\-
如果使用q
參數(也就是query_string
查詢),該Lucene Queryparser Syntax的規則。
根據您的分析儀鏈,您的索引中可能沒有任何-
字符,如果在這種情況下用您的查詢中的空格替換它們,也可能會起作用。
我以前試過,但沒有工作。 .. – Arun
除非分析儀專門處理了連字符,否則您的示例中的兩個單詞kanal
和kannan
將單獨編制索引,因爲任何非字母字符都默認作爲單詞分隔符處理。
查看Word Delimiter Token Filter的文檔,特別是type_table
參數的文檔。
這是我用來確保電子郵件領域進行索引正確
ft.custom_delimiter = {
"type": "word_delimiter",
"split_on_numerics": false,
"type_table": ["@ => ALPHANUM", ". => ALPHANUM", "- => ALPHA", "_ => ALPHANUM"]
};
非常感謝你的回覆..但我仍然面臨這個問題..請給任何其他想法.. – Arun
@ l4rd的答案應該正常工作的例子(我有相同的設置)。您擁有的另一個選項是使用關鍵字分析器標記字段以防止標記化。請注意,關鍵字標記器不會小寫任何內容,因此在這種情況下使用自定義分析器和關鍵字標記器。
我想我有同樣的問題,並找到了我的情況的解決方案:http://stackoverflow.com/questions/30917043/elasticsearch-searching-with-hyphens/30919206#30919206 – rvheddeg