如何在solr 7.7上启用模糊搜索?

时间:2019-04-10 14:24:08

标签: solr

我正在尝试模糊搜索标题文本,但是solr不会为我拼写错误的商标名称“ hilfinger ”查询提供任何结果:

http://rex:8983/solr/project/select?fq=white_label_id%3A6&q=title%3Ahilfinger~
{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"title:hilfinger~",
      "fq":"white_label_id:6",
      "_":"1554887612686"}},
  "response":{"numFound":0,"start":0,"docs":[]
  }}

使用标准搜索,我会得到正确命名 hilfiger 的结果:

http://rex:8983/solr/project/select?fq=white_label_id%3A6&q=title%3Ahilfiger
{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"title:hilfiger",
      "fq":"white_label_id:6",
      "_":"1554887612686"}},
  "response":{"numFound":27,"start":0,"docs":[
      {

在solr的配置中是否需要激活某些内容以启用模糊搜索,还是得到0个结果的原因是什么?

1 个答案:

答案 0 :(得分:1)

是的!您可以。您只需要正确配置schema.xml中要启用模糊搜索或部分匹配的字段即可。您可以在索引时间将过滤器添加到所需字段,以告诉Solr除存储原始值外,还存储每个值的ngrams。稍后,可以在该字段上执行模糊搜索。默认情况下,存在两种类型的此类过滤器,您只需将它们附加到索引分析器过滤器链即可。

在两种情况下,您都必须定义要在索引时间内生成的ngram的最小和最大大小。 (请注意,这也会增加索引的大小。)让我们使用过滤器在schema.xml中定义标题字段。

<fieldType name="title" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
   </analyzer>
   <analyzer type="query">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
   </analyzer>
</fieldType>

此处配置将ngram的最小大小定义为2个字母,最大定义为15个。 您可以通过替换行来更改过滤器,以从字段值的任何位置启用部分匹配,

<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>

使用

<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/>