Elasticsearch 近义词词库配置

8.10 版本之前

1.设置同义词文件 config/analysis/synonyms.txt

a,b => c
a,b,c
第一种在分词的时候,a,b都会解析成为c,然后把c存入索引中
第二种在分词的时候,有a的地方,都会解析成a,b,c,把a,b,c存入索引中
第一种方法相比之下有个主词,比较省索引。

2.定义mapping的时候添加到分词器上

{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym_filter": { // 自定义过滤器
          "type": "synonym",
          "updateable": true, // 能否动态更新(非热更新,可通过_reload_search_analyzers接口进行更新无需重建索引)
          "synonyms_path": "analysis/synonyms.txt" // 近义词文件地址
        }
      },
      "analyzer": {
        "my_synonyms_analyzer": {
          "tokenizer": "ik_smart",
          "filter": [
            "my_synonym_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_smart",
        "search_analyzer": "my_synonyms_analyzer"
      },
      ...
    }
  }
}

3.测试近义词库是否配置成功

GET /your_index/_analyze
{
  "analyzer": "my_synonyms_analyzer",
  "text": "xxx"
}
  • 注意:如果文件进行修改需要执行下面命令进行生效,多个index则需要每个都执行生效
POST /your_index_name/_reload_search_analyzers

8.10 版本之后

1.创建同义词集

PUT _synonyms/my-synonyms
{
  "synonyms_set": [
    {
      "id": "a",
      "synonyms": "a,b => c"
    },
    {
      "id": "a,b",
      "synonyms": "a,b,c"
    }
  ]
}

更新同义词集

PUT _synonyms/my-synonyms-set/a
{
  "synonyms": "a,b => d"
}

2.配置同义词集

{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym_filter": { // 自定义过滤器
          "type": "synonym",
          "updateable": true, // 能否动态更新
          "synonyms_set": "my-synonyms", // 同义词集
        }
      },
      "analyzer": {
        "my_synonyms_analyzer": {
          "tokenizer": "ik_smart",
          "filter": [
            "my_synonym_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_smart",
        "search_analyzer": "my_synonyms_analyzer"
      },
      ...
    }
  }
}
posted @ 2024-07-24 06:17  元気田支店长  阅读(83)  评论(0编辑  收藏  举报