定制化分词器

ES提供给了一些自带的分词器,如标准分词器,空格分词器,对中文支持不好。 因此也就有了一些第三方的分词器。 如ik分词器,这里用着还不错, 不过有的时候还是不能满足我们工作中的需要,因此就需要在现成的分词器上加一些定制化的改造。 有点像设计模式中的装饰模式。

这里选用的分词器是IK分词器。

扩展新词

进入 ik分词器的配置文件目录,创建new_dict.dic文件,并在里面添加自己想的词。然后在修改IKAnalyzer.cfg.xml 配置文件。指定扩展词文件的路径。

在这里插入图片描述
里面的还可以配置停用词,还远程扩展词库,也就是写一个服务器,可以动态添加。

这里需要重启一下ES服务器,才能让扩展词库有意义。

这个时候使用新词搜索还是不行的。很有可能一个内容也搜索不出来, 因此在原有的分词器这个新词是两个字, 索引已经创建了。这个时候如果在去拿一个新词去搜索,应该是搜索不出来的。

这个时候的解决办法就是更新一下索引。语法如下:

将name字段中的数据以输入的为条件查询出来 ,更新他的索引。这样就会使用新的分词器进行索引构建 了。 这里官方文档已经有了,只是没有说还需要更新索引。

POST /shop/_update_by_query
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "凯"
          }
        }},
        {
          "term": {
            "name": {
              "value": "悦"
            }
          }
        }
      ]
    }
  }
}

关于热更新 就请看官方文档吧。 IK分词器官方文档

同义词

  1. 在IK插件配置目录一下创建一个同义词文件。synonyms,txt
    文件内容如下:
    在这里插入图片描述
  2. 索引结构需要重新定义。
    原来的搜索结构是不支持同义词的, 我们需要重新定义。原来的索引就需要删除掉了。
    下面json中
    #1 代码 : synonyms_path 默认路径是es中的config目录, 我们是在analysis-ik这个目录下创建的,因此就有下面的内容了。
    在这里插入图片描述
    #2 代码:是对自定义分词器的使用。
    #0 代码 : 是处定义分词器。
# 将原来的索引删除
DELETE /shop


PUT /shop
{
  "settings": {
    "number_of_shards": 1, 
    "number_of_replicas": 1,
    "analysis": { `# 0`
      "filter": {
        "my_synonym_filter":{
          "type":"synonym",
          "synonyms_path":"analysis-ik/synonyms.txt"  `#1`
        }
      },
      "analyzer": {
        "ik_syno":{
          "type":"custom",
          "tokenizer":"ik_smart",
          "filter":["my_synonym_filter"]
        },
        "ik_syno_max":{
          "type":"custom",
          "tokenizer":"ik_max_word",
          "filter":["my_synonym_filter"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "id":{ "type": "integer"},
      "name":{"type": "text","analyzer": "ik_syno_max","search_analyzer": "ik_syno"}, `#2`
      "tags":{"type": "text","analyzer": "whitespace","fielddata": true},
      "location":{"type": "geo_point"},
      "remark_score":{"type": "double"},
      "price_per_man":{"type": "integer"},
      "category_id": {"type": "integer"},
      "category_name":{ "type": "keyword"},
      "seller_id":{"type":"integer"},
      "seller_remark_score":{"type": "double"},
      "seller_disabled_flag":{"type": "integer"}
      
    }
  }
}
  1. 需要重新构建索引了。

在查询的时候就可以使用同义词进行替换查询了。

交个朋友吧

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值