Elasticsearch搜索查询选择

时间:2013-07-25 05:34:45

标签: java elasticsearch

我想使用elasticSearch搜索术语(GoogleEarth或googleearch)。
现在,如果我尝试搜索“Google”查询,如果没有NGram或EdgeNGram,我将无法获得任何结果 我不想使用nGram因为它们得到了很多结果。所以现在我只使用Bool Query + multimatchquery。在这种情况下,我无法通过部分词语获得结果。 我希望我可以搜索“Google Earth”或“Google”或“Earth”来获取GoogleEarth。我怎么能得到这个?

现在我只使用查询'GoogleEarth'来获得正确的结果。如果包括在内,我想搜索条款。

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

更新

我尝试根据完全匹配搜索字词。如果我搜索“谷歌”,我想得到'谷歌***''googleearth'等等。我知道如果我使用edgeNGram或nGram,我可能会得到较少的相关结果。所以如果可能的话,我不想使用nGram或edgeNGram。 你有什么想法?

1 个答案:

答案 0 :(得分:1)

我认为您需要定义一个自定义分析器来根据驼峰情况对单词进行标记 - 即“GoogleEarth”需要被标记为“Google”和“Earth”部分。

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

camelcase tokenizer部分