2014-03-19 78 views
1

我想在彈性搜索來搜索名稱,在elasticSearch,無法搜索名稱以特殊字符「 - 」

考慮名稱KANAL - 坎南

通常我們用* na搜索的名字,我試過像這樣搜索 -

"/index/party_details/_search?size=200&from=0&q=(first_name_v:kanal-*)" 

此結果爲零記錄。

+0

我想我有同樣的問題,並找到了我的情況的解決方案:http://stackoverflow.com/questions/30917043/elasticsearch-searching-with-hyphens/30919206#30919206 – rvheddeg

回答

0

-是一個特殊字符需要轉義從字面上搜索:\-

如果使用q參數(也就是query_string查詢),該Lucene Queryparser Syntax的規則。

根據您的分析儀鏈,您的索引中可能沒有任何-字符,如果在這種情況下用您的查詢中的空格替換它們,也可能會起作用。

+0

我以前試過,但沒有工作。 .. – Arun

1

除非分析儀專門處理了連字符,否則您的示例中的兩個單詞kanalkannan將單獨編制索引,因爲任何非字母字符都默認作爲單詞分隔符處理。

查看Word Delimiter Token Filter的文檔,特別是type_table參數的文檔。

這是我用來確保電子郵件領域進行索引正確

ft.custom_delimiter = { 
    "type": "word_delimiter", 
    "split_on_numerics": false, 
    "type_table": ["@ => ALPHANUM", ". => ALPHANUM", "- => ALPHA", "_ => ALPHANUM"] 
}; 
+0

非常感謝你的回覆..但我仍然面臨這個問題..請給任何其他想法.. – Arun

0

@ l4rd的答案應該正常工作的例子(我有相同的設置)。您擁有的另一個選項是使用關鍵字分析器標記字段以防止標記化。請注意,關鍵字標記器不會小寫任何內容,因此在這種情況下使用自定義分析器和關鍵字標記器。