3

我正在尝试使用 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。和最大。尺寸?

感谢您的任何反馈。

4

1 回答 1

0

你可以做几件事:

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