0

我想使用 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')))

更新

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

4

1 回答 1

1

我认为您需要定义一个自定义分析器来标记基于驼峰大小写的单词 - 即“GoogleEarth”需要被标记为“Google”和“Earth”部分。

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

于 2013-07-25T06:29:50.123 回答