ElasticSearch6 IK 同义词 配置

网上大多数都是 es5 的配置方法, 关于 es6 的同义词配置 断断续续研究了好几天,今天本地 服务器上,终于配成功了,记录一下!

1. 创建一个索引
curl -v -X PUT localhost:9200/station_index
2. close index,因为我们接下来要对该索引设置
curl -XPOST 'localhost:9200/station_index/_close'
3. 配置ik同义词
curl -l -H "Content-Type:application/json" -H "Accept:application/json" -X PUT 'http://localhost:9200/station_index/_settings?preserve_existing=true' -d '{
  "index.analysis.analyzer.ik_syno.filter" : [
    "my_synonym_filter"
  ],
  "index.analysis.analyzer.ik_syno.tokenizer" : "ik_max_word",
  "index.analysis.analyzer.ik_syno.type" : "custom",
  "index.analysis.analyzer.ik_syno_smart.filter" : [
    "my_synonym_filter"
  ],
  "index.analysis.analyzer.ik_syno_smart.tokenizer" : "ik_smart",
  "index.analysis.analyzer.ik_syno_smart.type" : "custom",
  "index.analysis.filter.my_synonym_filter.synonyms_path" : "synonyms.txt",
  "index.analysis.filter.my_synonym_filter.type" : "synonym"
}'

如 synonyms.txt 发生变动,重启 es 服务器即可生效

我遇到的问题:
问题1:这里说一下,网上很多博客 修改 elasticsearch.yml 的做法,在 es6 中无法使用,例如:

ElasticSearch6 IK 同义词 配置_第1张图片

ElasticSearch6 IK 同义词 配置_第2张图片

es 服务器 告诉我 ,自从5.x 以后他们就不让这么做啦,只能通过访问 API 来设置,好吧,我直接复制改一下索引搞定

问题2:"type":"malformed_input_exception","reason":"Input length = 1"
详细信息如下

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"failed to build synonyms"}],
"type":"illegal_argument_exception","reason":"failed to build synonyms",
"caused_by":{"type":"malformed_input_exception","reason":"Input length = 1"}},"status":400}

原因:这个问题是由于 synonyms.txt 解析错误造成
1)检查你的语法配置是否如下

程王, 程王线 => 程王

2)编码 UTF-8 (很关键!!!我就是被坑在这里)


ElasticSearch6 IK 同义词 配置_第3张图片
4. open index
curl -XPOST 'localhost:9200/station_index/_open'
5. 测试
curl -l -H "Content-Type:application/json" -H "Accept:application/json" -X POST 'http://localhost:9200/station_index/_analyze' -d '{
  "analyzer" : "ik_syno_smart",
  "text" : "程王线"
}'

到这里已经大功告成了!

下面再把我的映射贴出来,有需要的可以参考

curl -l -H "Content-Type:application/json" -H "Accept:application/json" -X POST 'localhost:9200/station_index/station/_mapping' -d '{
    "properties": {
        "name": {
            "type": "text",
            "analyzer": "ik_syno_smart",
            "search_analyzer": "ik_syno_smart"
        }
    }
}'

你可能感兴趣的:(ElasticSearch6 IK 同义词 配置)