elasticsearch ik分词--实现专有名词分词 同义词解析

背景说明

公司有涉及汽车相关业务,需要基于输入的车型信息,去匹配系统已有的车型数据。
如输入“昂克赛拉 2016款 1.5L 自动”,
系统已有数据:“马自达3 昂克赛拉 2016款 两厢 1.5L AT 运动型”、“马自达3 昂克赛拉 2016款 两厢 2.0L AT 运动型”、“马自达3 昂克赛拉 2016款 两厢 2.0L AT 旗舰型”、“马自达3 昂克赛拉 2016款 两厢 1.5L MT 运动型”…
按匹配度展示给用户

实现

由于内容中包含中文、英文、数字,采用中文分词器(ik)来进行分词处理

优化前效果(使用ik-smart分词)

示例一:
elasticsearch ik分词--实现专有名词分词 同义词解析_第1张图片
问题:专有名词“昂克赛拉”被解析为四个词,不识别这个专有词

示例二:
elasticsearch ik分词--实现专有名词分词 同义词解析_第2张图片
问题:专有名词AT,没有解析处理。 被当做停用词处理掉了

示例三:
elasticsearch ik分词--实现专有名词分词 同义词解析_第3张图片
问题:汽车名词中,“手动”和“MT”表达的是同一个含义。本示例中的“手动”和示例二 MT这个词,没有解析为相同的词,降低了匹配度。

优化后效果

使用自定义的analyzer (ik_car_analyzer)
elasticsearch ik分词--实现专有名词分词 同义词解析_第4张图片
此时,可以看到,“昂克赛拉”被解析为一个词,AT没有被当做停用词且其同义词被解析出来了

调整点

  • 更新词库,添加汽车专用名词、品牌等信息。
    修改ik分词器下的词库文件,添加所有的汽车品牌、系列名称 (./plugins/ik/config/main.dic)
  • 构建同义词。如AT=自动,MT=手动。参考资料如下:
    • https://blog.csdn.net/yusewuhen/article/details/50685685
    • https://blog.csdn.net/tianzhaixing2013/article/details/51506496
  • 修正停用词。如AT,被忽略了
    修改ik分词器插件下的停止词文件 (./plugins/ik/config/stopword.dic)
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_car_analyzer": {
          "type":      "custom",
          "tokenizer": "ik_smart",
          "char_filter": [],
          "filter": [
            "lowercase",
            "ik_car_filter"      // 自定义过滤器
          ]
        }
      },
		"filter": {
		  "ik_car_filter": {
			"type": "synonym",   // 定义同义词
			"synonyms_path": "../plugins/ik/config/synonym.dic"
		  }
		}
    }
  }
}

你可能感兴趣的:(elasticsearch,术(知识点))