【问题标题】:Similarity search using Solr's NGramFilterFactory使用 Solr 的 NGramFilterFactory 进行相似性搜索
【发布时间】:2012-08-07 14:35:11
【问题描述】:

我正在尝试使用 Solr 中的 NGramFilterFactory(在 Rails 中使用 Sunspot)来查找类似的标题。我设法向我的 solr schema.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,因此通过动态字段将新字段添加到 sunspot。这一切都奏效了,我现在可以使用 NGramFilterFactory 搜索我的模型。我不确定的是,如何配置 solr 以搜索类似的标题。以下是我的具体问题:

  1. 当我尝试查询相似的标题时,使用 dismax 查询解析器是否有意义?
  2. (Minimum 'Should' Match) 参数如何帮助我找到相似的标题?
  3. 根据我究竟会选择 ngram min。和最大。尺寸?

感谢您的任何反馈。

【问题讨论】:

    标签: solr sunspot similarity n-gram dismax


    【解决方案1】:

    你可以做几件事:

    1. dismax 没有模糊搜索。因此,如果您想在用户搜索“homes”或“halmes”时返回“holmes”,最好更改为 edismax 解析器。
    2. 最小“应该”匹配可以帮助您定义搜索结果将取决于匹配的单词数量的灵活性。 假设用户查找 'Batman Dark Night' 并且您已标记化了 'Batman Darker Night' 和 'Batman Returns' 记录。如果 mm 为 2,则仅返回 'Batman Dark Night',因为它匹配最小数量的单词 'Batman' 和 'Night'。另一方面,'Batman Returns' 只匹配其中一个,因此不会被返回。
    3. NGramFilterFactory 主要用于自动完成。我认为 PorterStemFilterFactory 更适合您的需求。你可以在这里找到一些信息http://wiki.apache.org/solr/LanguageAnalysis#Notes_about_solr.PorterStemFilterFactory

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2011-01-01
      • 2017-04-22
      • 2011-12-26
      • 1970-01-01
      相关资源
      最近更新 更多