2013-07-25 146 views
0

我想使用elasticSearch搜索術語(GoogleEarth或googleearch)。
現在,如果我試圖搜索「Google」查詢,沒有NGram或EdgeNGram,我無法獲得任何結果。
我不想使用nGram,因爲他們得到了很多結果。所以現在我只使用Bool Query + multimatchquery。在這種情況下,我無法通過部分詞彙獲得結果。 我希望我可以搜索'Google地球'或'Google'或'地球'來獲取GoogleEarth。我怎樣才能得到這個?
Elasticsearch搜索查詢選擇

現在我只是使用查詢'谷歌地球'來得到正確的結果。我想搜索條款,如果他們包括在內。

.setQuery(QueryBuilders.boolQuery().should(QueryBuilders.multiMatchQuery(query, 
           'title','name','tag'))) 

更新

我試圖基於精確匹配搜索字詞。如果我搜索「谷歌」,我想要'谷歌''googleearth'等。我知道如果我使用edgeNGram或nGram,我可能會得到較少的相關結果。所以如果可能的話,我不想使用nGram或edgeNGram。 你有什麼想法嗎?

回答

1

我認爲你需要定義一個自定義分析器來根據駱駝案例對詞進行標記 - 即「GoogleEarth」需要被標記爲「Google」和「地球」部分。

http://www.elasticsearch.org/guide/reference/index-modules/analysis/pattern-analyzer/

+0

camelcase tokenizer部分謝謝您的答覆。我試圖根據完全匹配搜索條件。如果我搜索'谷歌',我可以'谷歌'谷歌'等'。我知道如果我使用edgeNGram,我可以得到這樣的結果。但我也應該得到較少的相關條款。你有什麼主意嗎? – Soo

+0

我不明白你的問題。我建議你更新你的問題,並提供許多確切的查詢例子和你期望匹配的源文本。還擴大你的意思是「不太相關的條款」。 – nickdos

+0

我只是說我可能會得到很多nGram相關的結果。如果我查詢'谷歌',我可能會'googa','goooo'。 – Soo