【问题标题】:Matching words and valid sub-words in elasticseachelasticsearch中匹配词和有效子词
【发布时间】:2016-10-16 05:13:05
【问题描述】:

我已经在现有代码库中使用 ElasticSearch 工作了几天,所以我希望一旦我知道自己在做什么,答案就会很容易。当我使用复合词(如“eyewitness”)或其由空格分隔的组成词(如“eye witness”)进行搜索时,我想扩展搜索以产生相同的结果。

例如,我有一个玩具车目录,其中包括“救火车”玩具和“消防车”玩具。我想确保如果有人搜索这些词中的任何一个,结果将同时包含“救火车”和“消防车”条目。

我一开始试图用匹配的“模糊性”来做到这一点,希望“消防车”被认为是与“救火车”相去甚远的一个变换,但这不起作用:ES 模糊性是逐字的,并且会不添加或删除空白字符作为有效的转换。

我知道我可以在生成查询之前进行一些暴力破解,方法是尝试通过将大词分解成小词并将小词组合成大词并根据字典检查所有这些词来提出额外的搜索词,但是当“模糊性”和专有名称成为任务的一部分时,这种情况很快就会分崩离析。

似乎这正是 ES 应该做好的事情,而我只是没有合适的词汇来寻找解决方案。

谢谢大家。

【问题讨论】:

    标签: elasticsearch fuzzy-search


    【解决方案1】:

    你可以做两件事:

    1. 您可以将单词拆分为复合词,即firetruck 将拆分为两个标记firetrucksee here
    2. 您可以使用 n-gram,即对于 4 克,原始 firetruck 被拆分为标记 fireiretretretrutrucruck。在查询中,评分功能可以帮助您获得相当不错的结果。查看this

    始终记住在分析和查询方面都进行相同的标记化。

    我将从 ngrams 开始,如果这还不够好,您应该使用复合词并自己拆分它们 - 但根据您所考虑的词汇量,这需要大量工作。

    希望这些概念和链接有所帮助,弗里克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 2023-03-30
      • 2016-10-10
      • 2013-08-08
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多