Solr搜索近似匹配

时间:2014-02-05 12:08:52

标签: solr

您好我想在solr中搜索近似匹配我的意思是如果我查询“管理”那么它应该寻找“经理”,“管理”等但不是“男人”。我目前正在使用String字段,它与我不想要的完全匹配。请建议一些我可以实现此目的的过滤器或分析器。谢谢。

2 个答案:

答案 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