2013-07-25 114 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