背景:

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 
        }
      }
    }
  }
}

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐