我正在尝试使用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 以搜索类似的标题。以下是我的具体问题:
- 当我尝试查询类似的标题时,使用 dismax 查询解析器是否有意义?
- (最小'应该'匹配)参数如何帮助我找到类似的标题?
- 根据什么,我会选择ngram最小和最大大小?
感谢您的任何反馈。
您可以做几件事:
- Dismax 没有模糊搜索。因此,如果您想在用户搜索"homes"或"halmes"时返回"holmes",最好更改为 edismax 解析器。
- 最小"应该"匹配可以帮助您 定义搜索结果在匹配的字数上有多灵活。假设用户查找"蝙蝠侠暗夜",并且您标记了"蝙蝠侠暗夜"和"蝙蝠侠归来"记录。如果 mm 为 2,则仅返回"蝙蝠侠黑夜",因为它与"蝙蝠侠"和"夜"的最小单词数匹配。另一方面,"蝙蝠侠归来"只匹配其中之一,因此不会返回。
- NGramFilterFactory 主要适用于自动完成。我认为PorterStemFilterFactory更适合您正在寻找的东西。您可以在此处找到一些信息 http://wiki.apache.org/solr/LanguageAnalysis#Notes_about_solr.PorterStemFilterFactory