背景:
es在查询数据的时候,使用a字段查询可以看到b字段是有内容的,但是模糊匹配b字段,是查询不到数据的。
复现事件经过
第一种正常: select * from table where a like "%%";
结果,明显看到b存在内容:我是b字段
{
"a":"我是a字段",
"b":"我是b字段"
}
第二种不正常:select * from table where b like "%%";
没有命中
思考:
这是不是很不合理?
对不合理!
我有内容,你凭啥不查出来
原因:
设置es存储字段的时候有个ignore_above属性有问题,如果设置的过短,将会导致超过这个长度的数据都不被索引,所以查不出来
解决:
把ignore_above改长,解决问题。
这里还有个注意的点,被索引的数据也是从修改之后被索引,历史的数据仍然查不到。
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"message": {
"type": "keyword",
"ignore_above": 20
}
}
}
}
}