我正在尝试添加自定义分析器。
curl -XPUT 'http://localhost:9200/my_index' -d '{
"settings" : {
"analysis" : {
"filter" : {
"my_filter" : {
"type" : "word_delimiter",
"type_table": [": => ALPHA", "/ => ALPHA"]
}
},
"analyzer" : {
"my_analyzer" : {
"type" : "custom",
"tokenizer" : "whitespace",
"filter" : ["lowercase", "my_filter"]
}
}
}
}
}'
当我可以在每次需要时重新创建索引时,它适用于我的本地环境,当我尝试在qa或prod等已经创建索引的其他环境中执行相同操作时,问题就出现了。
{
"error": "IndexAlreadyExistsException[[my_index] already exists]",
"status": 400
}
如何通过HTTP API添加自定义分析器?
答案 0 :(得分:4)
在documentation我发现要更新索引设置我可以这样做:
curl -XPUT 'localhost:9200/my_index/_settings' -d '
{
"index" : {
"number_of_replicas" : 4
}
}'
要更新分析仪设置,documentation说:
“......需要先关闭索引并在进行更改后将其打开。”
所以我最终这样做了:
curl -XPOST 'http://localhost:9200/my_index/_close'
curl -XPUT 'http://localhost:9200/my_index' -d '{
"settings" : {
"analysis" : {
"filter" : {
"my_filter" : {
"type" : "word_delimiter",
"type_table": [": => ALPHA", "/ => ALPHA"]
}
},
"analyzer" : {
"my_analyzer" : {
"type" : "custom",
"tokenizer" : "whitespace",
"filter" : ["lowercase", "my_filter"]
}
}
}
}
}'
curl -XPOST 'http://localhost:9200/my_index/_open'
为我修好了一切。
答案 1 :(得分:1)
对于使用AWS Elastic-search服务的人们,不允许关闭和打开,他们需要遵循here所述的重新索引。
基本上用当前原始索引的所有映射创建一个临时索引,并添加/修改这些映射和设置(分析器所在的位置),删除原始索引并使用该名称创建一个新索引,然后从临时索引复制回所有映射和设置