SOLR-如果查询是麦当娜,如何从麦当娜那里获得结果

SOLR-如果查询是麦当娜,如何从麦当娜那里获得结果,solr,Solr,我有一个音乐目录,包含歌曲的名字和艺术家的名字,当有人搜索“麦当娜”时,我希望他们找到麦当娜的歌曲,不管他们是否只写“麦当娜”和一个“n” 我在某个地方读到了同义词,然后我放了一个包含同义词列表的文件,类似这样: madona => madonna metalica => metallica 在schema.xml中: <filter class="solr.SynonymFilterFactory" synonyms="lang/synonyms.txt" ignoreCa

我有一个音乐目录,包含歌曲的名字和艺术家的名字,当有人搜索“麦当娜”时,我希望他们找到麦当娜的歌曲,不管他们是否只写“麦当娜”和一个“n”

我在某个地方读到了同义词,然后我放了一个包含同义词列表的文件,类似这样:

madona => madonna
metalica => metallica
在schema.xml中:

<filter class="solr.SynonymFilterFactory" synonyms="lang/synonyms.txt" ignoreCase="true" expand="true"/>

但没有结果


我能做什么?请帮忙

同义词是一种可能的方法,但当您希望在运行时替换或附加其他查询词时,它最合适。例如,如果有人在搜索家具时输入了关键字“coach”,那么逻辑上也可能包含“sofa”的同义词。这就是同义词的预期用途

在处理拼写错误和/或打字错误时,这些情况通常最好通过词干分析来处理。词干分析采用一个术语(标记),并将其简化为一个经常缩写的词的核心表示形式。不同的分析器可以使用各种各样的标记词干分析器,将文本缩减为能够产生更有效搜索的内容,例如引用同一文档的“麦当娜”和“麦当娜”


词干分析可以追溯到语言分析领域,因此它不是一个快速的学习周期。也就是说,您可以通过管理工具试用Solr中包含的不同分析器。根据您使用的Solr版本,该菜单包含“分析”选项。此页面允许您选择任何基础Solr字段类型(以及您自己的模式中的任何类型),为索引和查询插入一些文本,并查看分析器生成的内容。你可能找不到你想要的东西,但Solr的可配置性允许你将它们以不同的组合连接在一起。一旦你掌握了这些背景知识,你就可以根据自己的具体使用情况来构建这些背景知识。

我可以想出以下替代方案:

  • 同义词已经提到了,缺点是你需要提前知道它们
  • 语音分析器。我认为这对艺术家的名字最有效,因为拼写错误更常见
  • 使用模糊搜索也应该有效

  • 非常感谢大家

    我发现同义词有一些有趣的地方:列表中应该包含标记而不是单词,因此即使使用同义词,也不会产生预期的结果,因为madonna的索引标记是Madonn,而为madonna查询生成的标记是madon,因此同义词列表中应该包括:

    madon => madonn
    
    只有这样才有结果

    至于使用另一个当前正在使用的解析器:

    <!-- Portuguese -->
    <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index"> 
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_pt.txt" format="snowball" enablePositionIncrements="true"/>
        <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms_pt.txt" ignoreCase="true" expand="true"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_pt.txt" format="snowball" enablePositionIncrements="true"/>
        <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms_pt.txt" ignoreCase="true" expand="true"/>
      </analyzer>
    </fieldType>
    
    
    

    仅在索引时使用同义词过滤器工厂,而不是在查询时使用。更改后,请重新索引要显示在搜索结果中的数据。见这个问题: