配置方式
自定义检索分析器
- 在索引settings中自定义带同义词功能 的分析器,其中,filter中
synonyms_set、synonyms、synonyms_path根据同义词集配置方式不同,三选一
- 在mappings中使用自定义的分析器
json
复制代码
{
"settings": {
"index": {
"analysis": {
"filter": {
"synonym_filter": {
"ignore_case": "true",
"updateable": "true",
"type": "synonym_graph",
"synonyms_set": "xxxx",
"synonyms": "xxxx",
"synonyms_path":"xxxx"
}
},
"analyzer": {
"index_analyzer": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "ik_max_word"
},
"search_analyzer": {
"filter": [
"synonym_filter",
"lowercase"
],
"type": "custom",
"tokenizer": "ik_max_word"
}
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
},
"analyzer": "index_analyzer",
"search_analyzer": "search_analyzer"
}
}
}
}
三种设置同义词方式
- 首先定义一个同义词分析器,支持三种设置同义词的方式:内联同义词列表、引用外部同义词文件和同义词API(Elasticsearch7.x 以上新增API)
| 配置方式 |
核心描述 |
适用场景与注意事项 |
| 1. 内联同义词列表 |
在创建索引或分析器的设置时,直接在 synonyms 参数中以数组形式列出同义词规则。 |
快速验证和少量同义词 。规则变更需要关闭索引并重建,不适合大规模或频繁更新。 |
| 2. 引用外部同义词文件 |
通过 synonyms_path 参数指向一个存放在每个ES节点本地磁盘上的文本文件。 |
同义词规则较多 时更便于管理。文件更新后,可通过 _reload_search_analyzers API 重载,无需重启索引。 |
| 3. 同义词 API (官方推荐方式) |
使用专用的 _synonyms API 创建和管理一个独立的同义词集 ,在分析器中通过 synonyms_set 引用。 |
Elasticsearch 8.x 的现代化方式 。提供集中的、可动态更新的同义词管理,无需接触节点本地文件,尤其适用于云环境或容器化部署。 |
内联同义词列表
json
复制代码
{
"analysis": {
"filter": {
"synonym_filter": {
"ignore_case": "true",
"type": "synonym",
"updateable": "true",
"synonyms": [
"手机,移动电话,IPhone",
"耳机,蓝牙耳机,耳麦"
]
}
}
}
}
引用外部同义词文件
- 支持2中引入方式,即本地文件和远程API文件(需要安装插件)
- 本地文件修改后,不可直接生效,需要重新加载索引
本地文件
json
复制代码
{
"analysis": {
"filter": {
"synonym_filter": {
"ignore_case": "true",
"type": "synonym",
"updateable": "true",
"synonyms_path": "/usr/share/elasticsearch/data/synonym/custom_synonym_set.txt"
}
}
}
}
重新加载索引
- 关闭索引:GET <index_name>/_close
- 打开索引:GET <index_name>/_open
远程文件
shell
复制代码
bin/elasticsearch-plugin install https://github.com/jprante/elasticsearch-analysis-url/releases/download/7.10.2/analysis-url-7.10.2-plugin.zip
同义词API
同义词集管理
添加同义词集
- 请求方式:PUT
- URI:
_synonyms/自定义数据集名称,例如:自定义数据集名称为:custom_synonyms_set
json
复制代码
{
"synonyms_set": [
{
"id": "1",
"synonyms": "手机,移动电话,IPhone"
},
{
"id": "2",
"synonyms": "耳机,蓝牙耳机,耳麦"
}
]
}
查询同义词集
- 请求方式:GET
- URI:
_synonyms/自定义数据集名称,例如:自定义数据集名称为:custom_synonyms_set
- 更新方式为全量更新,不能增量更新。更新后,可立即生效
删除同义词集
- 请求方式:DELETE
- URI:
_synonyms/自定义数据集名称,例如:自定义数据集名称为:custom_synonyms_set
- 如果同义词集有被其他索引引用,则会删除失败。所以无需担心误删情况
使用自定义的同义词集
- custom_synonyms_set为自定义的同义词集
json
复制代码
{
"analysis": {
"filter": {
"synonym_filter": {
"ignore_case": "true",
"type": "synonym",
"updateable": "true",
"synonyms_set": "custom_synonyms_set"
}
}
}
}