You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch同义词查询报错求助:[synonym]分析器未找到

解决Elasticsearch中[multi_match] analyzer [synonym] not found错误

问题出在你只定义了一个synonym过滤器,但并没有创建一个名为synonym的分析器。Elasticsearch的分析器是由分词器(tokenizer)+ 过滤器(filter)组合而成的,你现在只配置了过滤器,没有把它组装成一个可用的分析器,所以查询时会找不到对应的analyzer。

下面是具体的修复步骤:

1. 重新创建包含自定义同义词分析器的索引

你需要在settings中添加一个自定义分析器,把之前的synonym过滤器和一个分词器(比如标准分词器)组合起来,形成一个完整的分析器:

PUT /test_index2
{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "synonym_filter": {  // 给过滤器起一个清晰的名称
            "type": "synonym",
            "synonyms": ["mezzo,centro"]
          }
        },
        "analyzer": {
          "my_synonym_analyzer": {  // 这是我们要创建的自定义同义词分析器
            "tokenizer": "standard",
            "filter": ["lowercase", "synonym_filter"]  // 组合分词器与过滤器,加入lowercase能兼容大小写场景
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text"
      }
    }
  }
}

2. 使用正确的分析器名称执行查询

现在查询时指定我们创建的my_synonym_analyzer即可:

{
  "query": {
    "multi_match": {
      "query": "centro",
      "fields": ["content"],
      "analyzer": "my_synonym_analyzer"
    }
  }
}

额外说明

如果不想重新创建索引,你也可以通过更新索引设置的方式添加分析器,但需要先关闭索引,更新完成后再打开:

POST /test_index2/_close
PUT /test_index2/_settings
{
  "index": {
    "analysis": {
      "filter": {
        "synonym_filter": {
          "type": "synonym",
          "synonyms": ["mezzo,centro"]
        }
      },
      "analyzer": {
        "my_synonym_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "synonym_filter"]
        }
      }
    }
  }
}
POST /test_index2/_open

不过这种方式对新手来说,重新创建索引会更简单、不易出错。

内容的提问来源于stack exchange,提问作者user2462353

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:17:06