使用Solr的NGramFilterFactory进行相似性搜索



我正在尝试使用Solr中的NGramFilterFactory(在Rails中使用Sunspot)来查找类似的标题。我设法向我的 solr 架构添加了一个新字段.xml如下所示:

<fieldType name="text_ngrm" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="4"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

由于我在 rails 应用程序中使用 sunpsot,因此通过动态字段将新字段添加到太阳黑子中。这一切都有效,我现在可以使用NGramFilterFactory搜索我的模型。我不确定的是,如何配置 solr 以搜索类似的标题。以下是我的具体问题:

  1. 当我尝试查询类似的标题时,使用 dismax 查询解析器是否有意义?
  2. (最小'应该'匹配)参数如何帮助我找到类似的标题?
  3. 根据什么,我会选择ngram最小和最大大小?

感谢您的任何反馈。

您可以做几件事:

  1. Dismax 没有模糊搜索。因此,如果您想在用户搜索"homes"或"halmes"时返回"holmes",最好更改为 edismax 解析器。
  2. 最小"应该"匹配可以帮助您 定义搜索结果在匹配的字数上有多灵活。假设用户查找"蝙蝠侠暗夜",并且您标记了"蝙蝠侠暗夜"和"蝙蝠侠归来"记录。如果 mm 为 2,则仅返回"蝙蝠侠黑夜",因为它与"蝙蝠侠"和"夜"的最小单词数匹配。另一方面,"蝙蝠侠归来"只匹配其中之一,因此不会返回。
  3. NGramFilterFactory 主要适用于自动完成。我认为PorterStemFilterFactory更适合您正在寻找的东西。您可以在此处找到一些信息 http://wiki.apache.org/solr/LanguageAnalysis#Notes_about_solr.PorterStemFilterFactory

相关内容

  • 没有找到相关文章

最新更新