充电复习之ES 扩展词库及热更新词库,扩展同义词词库,及热扩展词库

1.es扩展词库



在/usr/local/es/elasticsearch-node01/plugins/elasticsearch-analysis-ik-7.2.1/config中新建文件
new_word.dic
echo "上海警告" > new_word.dic
修改IKAnalyzer.cfg.xml
new_word.dic
重启es集群
sh kill-es.sh
sh r-start.sh
在kibana中执行会发现《上海警告》分格出
GET _analyze?pretty
{
  "analyzer": "ik_smart",
  "text": "【上海警告】您的工作还有一部分没有做完1"
}



热更新词库





其实上述词库个人认为没有啥应用的余地,因为一个项目不可能为了一个扩展词而去重启es,所以需要热更新词库,
就实现此目录有两种方法
1.更改ik的一个源码
2.修改IKAnalyzer.cfg.xml中的

        IK Analyzer 扩展配置
        
        new_word.dic
         
        
        
        http://106.14.65.218:8081/new_word.dic
        
        


这里我们需要可以返回特点格式的文件这里我用nginx中的一个静态文件代替,读者可通过api接口返回此文件
简单安装nginx
docker pull nginx
创建目录备用
mkdir -p /usr/local/nginx/www /usr/local/nginx/logs /usr/local/nginx/conf
这里需要nginx.conf 手写的话风险大
docker images
docker run --name nginx -p 8081:80 -d 4571e56e27f0
docker ps
docker cp 容器id:/etc/nginx/nginx.conf /usr/local/nginx/conf
运行
docker run --name=nginx -v /usr/local/nginx/www:/usr/share/nginx/html -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/logs:/var/log/nginx -p 8081:80 -d 4571e56e27f0
在www/目录下创建 index.html

在kibana中执行会发现《苹果树警告》分格出
GET _analyze?pretty
{
  "analyzer": "ik_smart",
  "text": "【苹果树警告】您的工作还有一部分没有做完"
}

3.同义词

在工作中我遇到了以下要求
"【苹果树】您的工作还有一部分没有做完" 中的 “苹果树” 是等价于 ”上海同义词“
所以es要想实现此需求,则需要扩展词库

1.在/usr/local/es/elasticsearch-node01/plugins/elasticsearch-analysis-ik-7.2.1/config中新建文件
new_synonyms.txt
echo "苹果树,上海同义词"
https://github.com/bells/elasticsearch-analysis-dynamic-synonym
2.删除索引,重新建立能够支持同义词的索引结构
DELETE /es_sms
PUT /es_sms
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1
  },
  "analysis":{
    "filter":{
      "javatom_synonym_filter":{
        "type":"synonym",
        "synonyms_path":"elasticsearch-analysis-ik-7.2.1/config/javatom_synonyms.txt"
      },
      "javatom_remote_synonym" : {
         "type" : "dynamic_synonym",
         "synonyms_path" : "http://106.14.65.218:8081/javatom_synonyms.txt",
          "interval": 30
        }
    },
    "analyzer":{
      "ik_sms":{
        "type":"custom",
        "tokenizer":"ik_smart",
        "filter":["javatom_synonym_filter","javatom_remote_synonym"]
      },
      "ik_sms_max":{
        "type":"custom",
        "tokenizer":"ik_max_word",
        "filter":["javatom_synonym_filter","javatom_remote_synonym"] 
      }
    }
  },
  "mappings": {
    "properties": {
      "id":{"type": "integer"},
      "phone":{"type":"keyword"},
      "content":{"type":"text","analyzer":"ik_sms_max","search_analyzer":"ik_sms"}
    }
    
  }
}
3.在上述我的配置中就可以我配置两个中方式来获取同义词
3.1 javatom_synonym_filter
3.2 javatom_remote_synonym 热更新同义词
第二种方式返回文件只要与javatom_synonym_filter格式相同就可以 


你可能感兴趣的:(es,es,elasticsearch)