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
相关产品推荐
相关产品推荐

