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

时间:2012-08-07 14:35:12

标签: solr sunspot similarity n-gram dismax

我正在尝试在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,因此通过动态字段将新字段添加到太阳黑子中。这一切都奏效了,我现在可以使用NGramFilterFactory搜索我的模型。我不确定的是,如何配置solr以搜索类似的标题。以下是我的具体问题:

  1. 当我尝试查询类似的标题时,使用dismax查询解析器是否有意义?
  2. (Minimum 'Should' Match)参数如何帮助我找到类似的标题?
  3. 根据我究竟选择的ngram min。最多的大小?
  4. 感谢您的任何反馈。

1 个答案:

答案 0 :(得分:0)

你可以做几件事:

  1. dismax 没有模糊搜索。因此,如果您想在用户搜索“homes”或“halmes”时返回“holmes”,那么最好更改为 edismax 解析器。
  2. 最低“应该匹配” 可以帮助您定义搜索结果在匹配的字数上的灵活性。 让我们假设一个用户正在寻找'蝙蝠侠黑夜',你已经'蝙蝠侠黑暗之夜'和'蝙蝠侠归来'记录标记化。如果mm为2,则仅返回'Batman Dark Night',因为它匹配'Batman'和'Night'的最小单词数。另一方面,'Batman Returns'仅匹配其中一个,因此不会返回。
  3. NGramFilterFactory 主要用于自动填充。我认为 PorterStemFilterFactory 可以更好地满足您的需求。您可以在http://wiki.apache.org/solr/LanguageAnalysis#Notes_about_solr.PorterStemFilterFactory
  4. 找到一些信息