ES-定义静态扩展词库与热更新词库

2022-04-08  本文已影响0人  卡门001

1、配置节点1

cd node1/config/analysis-ik
echo '凯悦' >  vim new_word.dic

在标准分词中,“凯悦”被为开两个词,会在业务语义中造成搜索误差。

将new_word.dic配置到文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">new_word.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

2、将扩展词库文件与配置复制到节点2,与节点3

cp new_word.dic /opt/elasticsearch8.0.0/node2/config/analysis-ik/
cp new_word.dic /opt/elasticsearch8.0.0/node3/config/analysis-ik/

cp IKAnalyzer.cfg.xml /opt/elasticsearch8.0.0/node2/config/analysis-ik/
cp IKAnalyzer.cfg.xml /opt/elasticsearch8.0.0/node3/config/analysis-ik/

3、重启ES

# 杀掉进程
# 重启

jps:s 查看进程
kill -9 ... :杀进程
重启:
node1/bin/elasticsearch -d
node2/bin/elasticsearch -d
node3/bin/elasticsearch -d

4、更新搜索 - UPDATE BY QUERY

(在建索引时,需要将扩展词库加入,否则有可能搜不到数据)

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

5、在Kibana上验证

GET /shop/_analyze
{
  "analyzer": "ik_smart",
  "text": "凯悦"
}

GET /shop/_search
{
  "query": {
    "match": {
      "name": "凯悦"
    }
  }
}

不会再查到 只有一个 "凯" 或 "悦” 的单独的记录了, 输出结果

 "tokens" : [
   {
     "token" : "凯悦",
     "start_offset" : 0,
     "end_offset" : 2,
     "type" : "CN_WORD",
     "position" : 0
   }
 ]
}

6、热更新词库 - 修改上述配置中第1点配置信息

1、创建一个Http服务

- last-modified
- etag

只要这两个字段的信息有变更,则数据自动重新加载
es: 每1分钟检索一次

2、修改config/IKAnalyzer.cfg.xml配置文件指向Http服务

<entry key="ext_dict">http://site.com/newWordAction</entry>

3、其他

后继步骤同上

上一篇下一篇

猜你喜欢

热点阅读