2012-08-07 59 views
3

我想在Solr中使用NGramFilterFactory(在Rails中使用太阳黑子)来查找相似的标题。我设法一个新字段添加到我的Solr schema.xml中像如下:使用Solr的NGramFilterFactory进行相似性搜索

<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。和最大。大小?

感谢您的任何反馈。

回答

0

有几件事情你可以做:

  1. dismax没有模糊搜索。因此,如果您想在用户搜索“家庭”或“终端”时返回“福尔摩斯”,最好是将其更改为解析器。
  2. 最低'应该'匹配可以帮助您定义您的搜索结果将如何灵活处理匹配的单词数量。 让我们假设用户寻找'蝙蝠侠暗夜',并且您有'蝙蝠侠暗夜'''和'蝙蝠侠归来'记录标记。如果mm是2,则仅返回'蝙蝠侠暗夜',因为它匹配最少数量的单词'蝙蝠侠'和'夜'。另一方面,'蝙蝠侠归来'只匹配其中一个,所以它不会被退回。
  3. NGramFilterFactory主要用于自动完成。我认为PorterStemFilterFactory更符合您的需求。你可以在这里找到一些信息http://wiki.apache.org/solr/LanguageAnalysis#Notes_about_solr.PorterStemFilterFactory