您好我想在solr中搜索近似匹配我的意思是如果我查询“管理”那么它应该寻找“经理”,“管理”等但不是“男人”。我目前正在使用String字段,它与我不想要的完全匹配。请建议一些我可以实现此目的的过滤器或分析器。谢谢。
答案 0 :(得分:2)
您需要查看stemming。根据您需要处理的语言,有不同的分析器。
答案 1 :(得分:0)
如果没有强烈要求使用Solr分析仪,您只需使用通配符'*'字符即可获得上述搜索结果。
例如:假设模式中的字段名称为“foo”,其值为“b”,“ba”,“bar”,“bart”,“bartender”,& “FOOBAR”。要使用“bar”搜索所有值,您只需查询如下。
q=foo:(bar*)
以上查询将返回“bar”,“bart”& “酒保”。希望这是你想要的。
更新:
并且,如果您要求使用Solr分析仪和&过滤器,然后 solr.EdgeNGramFilterFactory 是您应该寻找的过滤器工厂。
此FilterFactory在查询时间内匹配索引中特定术语的前缀子串(或后缀子串,如果side =“back”)时非常有用。边缘n-gram分析可以在索引或查询时(或两者)执行,但通常更有用的是,如本例所示,在索引时生成n-gram,所有n-gram索引在同样的立场。在查询时,查询项可以直接匹配,无需任何n-gram分析。与通配符不同,n-gram查询术语可以在引用的短语中使用。
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.EdgeNGramFilterFactory
检查下面的schema.xml的字段类型定义。
<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldType>
Shishir