ES 分詞器設置+同義詞設置


分詞器需求場景

在線動態更新詞庫,查詢 把悲傷留給自己 ,不能查出 悲傷自己 之類關聯的文檔

官網地址

https://github.com/medcl/elasticsearch-analysis-ik

實現案例

分詞器設置

采用 ik 分詞器,使用 nginx 代理一個簡單的在線詞庫,
IK分詞器安裝很簡單,直接下載丟到 ES 的 plugin 文件夾下重啟 ES 即可;網絡允許的話也可以使用在線安裝指令 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip ,需要注意的是版本對應。

  1. ik 分詞器配置 plugins/ik_analyzer/config/IKAnalyzer.cfg.xml
<?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">extra_main.dic;extra_single_word.dic;extra_single_word_full.dic;extra_single_word_low_freq.dic</entry> -->
    <!--用戶可以在這里配置自己的擴展停止詞字典-->
    <entry key="ext_stopwords"></entry>
    <!--用戶可以在這里配置遠程擴展字典 -->
    <entry key="remote_ext_dict">http://172.31.1.204:1180/dic/extra_main.dic,http://172.31.1.204:1180/dic/extra_single_word.dic,http://172.31.1.204:1180/dic/extra_single_word_full.dic,http://172.31.1.204:1180/dic/extra_single_word_low_freq.dic,http://172.31.1.204:1180/dic/ik.dic</entry>
    <!--用戶可以在這里配置遠程擴展停止詞字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

image

  1. nginx 代理詞庫
    1. 需要先隨便啟動個 nginx 容器,把需要的文件復制到外掛目錄。
    2. 在外掛目錄下配置 nginx 代理詞庫
    3. 啟動容器
    docker run --name nginx \
    -p 1080:80 \
    -p 1180:180 \
    -v /data/nginx/html:/usr/share/nginx/html \
    -v /data/nginx/modules:/usr/lib/nginx/modules \
    -v /data/nginx:/etc/nginx \
    nginx:1.21.6
    

同義詞需求場景

查詢 土豆 要能得到 馬鈴薯

官網地址

https://www.elastic.co/guide/en/elasticsearch/reference/8.1/indices-reload-analyzers.html

實現案例

本文使用了 ik 分詞器,不知道怎么安裝 ik 分詞器的去這里:https://github.com/medcl/elasticsearch-analysis-ik

# 第一步,配置索引
PUT /my-index-000001
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_synonyms": {
            "tokenizer": "ik_smart",
            "filter": [ "synonym" ]
          }
        },
        "filter": {
          "synonym": {
            "type": "synonym_graph",
            "synonyms_path": "analysis/synonym.txt",  
            "updateable": true                        
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "my_synonyms"              
      }
    }
  }
}

# 第二步,初始化數據
POST _bulk
{"index":{"_index":"my-index-000001","_id":1}}
{"key1":"1","key2":"11","key3":"111","text":"blue"}
{"index":{"_index":"my-index-000001","_id":2}}
{"key1":"2","key2":"22","key3":"2222","text":"2222"}
{"index":{"_index":"my-index-000001","_id":3}}
{"key1":"3","key2":"33","key3":"333","text":"3333"}
{"index":{"_index":"my-index-000001","_id":4}}
{"key1":"4","key2":"44","key3":"444","text":"4444"}

# 第三步,添加同義詞,如果是集群,請修改所有節點上的同義詞配置文件
vim /data/elasticsearch1/config/analysis/synonym.txt

# 第四步,刷新分詞器,這回重新加載分詞器下的同義詞
POST /my-index-000001/_reload_search_analyzers
# 清理緩存,重新加載搜索分析器后,您應該清除請求緩存以確保它不包含從以前版本的分析器派生的響應
POST /my-index-000001/_cache/clear?request=true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM