在elasticseach中匹配单词和有效的子单词

时间:2016-10-16 05:13:06

标签: elasticsearch fuzzy-search

我已经在现有代码库中使用ElasticSearch几天了,所以一旦我知道自己在做什么,我希望答案很简单。当我用复合词搜索时,我希望扩展搜索以产生相同的结果,例如&#34;目击者&#34;,或者用空白分隔的组成单词,例如&#34;目击者&#34;。< / p>

例如,我有一个玩具车目录,包括&#34;救火车&#34;玩具和&#34;消防车&#34;玩具。我想确保如果有人搜索这些条款中的任何一个,结果将包括&#34;救火车&#34;和#34;消防车&#34;条目。

我首先尝试使用&#34; fuzziness&#34;一场比赛,希望&#34;消防车&#34;将被视为远离&#34; firetruck&#34;的一个变换,但这不起作用:ES模糊是单词,不会添加或删除空格字符作为有效转换。

我知道在生成查询之前我可以通过尝试通过将大词分成更小的单词以及将更小的单词加入更大的单词并将所有单词与字典进行检查来提出额外的搜索项来做一些暴力破解,但是当&#34;模糊&#34;和专有名称是任务的一部分。

看起来这正是ES应该做得很好的事情,而且我还没有找到合适的词汇来搜索解决方案。

谢谢大家。

1 个答案:

答案 0 :(得分:0)

你可以做两件事:

  1. 你可以将单词拆分成他们的化合物,即firetruck将被分成两个标记firetrucksee here
  2. 你可以使用n-gram,即4克原始firetruck被分成标记fireiretretretrutrucruck。在查询中,评分功能可以帮助您获得相当不错的结果。查看this
  3. 始终记住在分析和查询方面都进行相同的标记化。

    我会先从ngrams开始,如果这还不够好,你应该使用这些化合物并自己拆分 - 但这取决于你所考虑的词汇量,这是很多工作。

    希望概念和链接有所帮助,fricke