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

1、配置节点1

  • 定义词库
cd node1/config/analysis-ik
echo '凯悦' >  vim new_word.dic

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

  • 2、词库配置
    编辑config/IKAnalyzer.cfg.xml

将new_word.dic配置到文件中




        IK Analyzer 扩展配置
        
        new_word.dic
         
        
        
        
        
        

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服务

http://site.com/newWordAction

3、其他

后继步骤同上

你可能感兴趣的:(ES-定义静态扩展词库与热更新词库)