
有人知道这会是什么造成的吗? index 里有个字段的 mapping type 从 keyword 变成了 text。查了一圈对这个 index 有操作的代码,没有会影响的。
从
{ album: { mappings: { album: { attrs: { full_name: "attrs", mapping: { attrs: { type: "keyword" } } } } } } } 变成了
{ album: { mappings: { doc: { attrs: { full_name: "attrs", mapping: { attrs: { type: "text", fields: { keyword: { type: "keyword", ignore_above: 256 } } } } } } } } } 把探索过程记录下,看看是不是能帮到有缘人。。
前提:有个index的字段是attrs,值是一个List,查询需求是精确匹配,所以在建立index的时候指定了这个字段的type是keyword。
这个问题更准确点说应该是datatype转成了multi fields,即一个字段定义多种映射类型,比如name字段同时有text和keyword类型,name的text类型用于模糊搜索,keyword类型用户完全匹配搜索。
但是是什么原因导致这个字段变成了multi fields,目前还是没有找到。
我按如下方式尝试绕过: 重建这个index,对attrs字段手动指定multi fields的类型,可以看这里的例子,大概是这样:
{ "mappings": { "album": { "properties": { "attrs": { "type": "keyword", "fields": { "raw": { "type": "keyword" } } } } } } 然后查询的时候改用attrs.raw字段名,大概是这样:
{ "query" : { "bool" : { "filter" : [ { "terms" : { "attrs.raw" : [ "某attr" ] } } ] } } } 目前就是这个情况,更到线上看看type还会不会被改掉。