solr中文同义词问题,求教

新手上路,请多包涵

通过测试发现同义词配置是由效果的,找到了wa的两个同义词。

{
  "responseHeader": {
    "status": 0,
    "QTime": 21,
    "params": {
      "q": "my_name:wa",
      "debug": "true",
      "indent": "true",
      "wt": "json",
      "_": "1506070525783"
    }
  },
  "response": {
    "numFound": 0,
    "start": 0,
    "docs": []
  },
  "debug": {
    "rawquerystring": "my_name:wa",
    "querystring": "my_name:wa",
    "parsedquery": "(my_name:wangqiang my_name:王强)/no_coord",
    "parsedquery_toString": "my_name:wangqiang my_name:王强",
    "explain": {},
    "QParser": "LuceneQParser",
    "timing": {
      "time": 21,
      "prepare": {
        "time": 18,
        "query": {
          "time": 18
        },
        "facet": {
          "time": 0
        },
        "facet_module": {
          "time": 0
        },
        "mlt": {
          "time": 0
        },
        "highlight": {
          "time": 0
        },
        "stats": {
          "time": 0
        },
        "expand": {
          "time": 0
        },
        "debug": {
          "time": 0
        }
      },
      "process": {
        "time": 1,
        "query": {
          "time": 0
        },
        "facet": {
          "time": 0
        },
        "facet_module": {
          "time": 0
        },
        "mlt": {
          "time": 0
        },
        "highlight": {
          "time": 0
        },
        "stats": {
          "time": 0
        },
        "expand": {
          "time": 0
        },
        "debug": {
          "time": 1
        }
      }
    }
  }
}

通过debug发现,同义词的配置也有效果,通过parsedquery_toString字段的值能够发现,wa已经转换为同义词,但是搜索结果什么都没有。

parsedquery_toString字段的值直接进行搜索,结果是正确的

{
  "responseHeader": {
    "status": 0,
    "QTime": 75,
    "params": {
      "q": "my_name:wangqiang my_name:王强",
      "indent": "true",
      "wt": "json",
      "_": "1506070781482"
    }
  },
  "response": {
    "numFound": 2,
    "start": 0,
    "docs": [
      {
        "id": "13",
        "my_name": "王强",
        "_version_": 1579146583993221000
      },
      {
        "id": "121",
        "my_name": "王强",
        "_version_": 1579151020009717800
      }
    ]
  }
}

字段的配置如下:

 <fieldType name="text_smartcn" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      </analyzer>
      <analyzer type="query">
         <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
         <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      </analyzer>
  </fieldType>

使用的是5.5.3版本中自带的中文分词器,ik也试过,同样的问题

阅读 3.7k
2 个回答

之前写的不对。。
我基本采用同样的配置效果如图图片描述

我也不知道你那块出了问题,你Field Value (Index)那块输入值分析一下,看看问题出来没,具体想看我的那块的配置,我都可以给你
图片描述

新手上路,请多包涵

花了很长的时间解决了。总的来说是solr不够了解。

上面的那个例子中,在index的时候对王强进行了拆分,即'王','强',二同义词过滤之后的结果是'王强',并以此作为查询的term进行查询,所以索引中不存在。解决方法是使用ik的拓展词,在index阶段对'王强'作为一个词索引,即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题