Spring Data Elasticsearch String类型不指定filed 索引创建情况

  对于String类型的字段如果不指定类型会默认创建两种倒排索引

        "itemSkuCodes": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }

    Text类型的倒排索引

 

    Elasticsearch会对其进行分词处理,然后创建这些词项的倒排索引以支持全文搜索。

    Keyword类型的倒排索引

    Elasticsearch会将整个值作为一个整体来索引,不会进行分词处理。但是当存储值大于 ignore_above 设置的值时, Keyword会被截断 导致失效,当使用Elasticsearch中的"keyword"类型字段时,如果字段值的长度超过了"ignore_above"参数所设置的值,会导致倒排索引失效。这是因为"keyword"类型的字段会将整个字段值作为一个整体来索引,而不会对字段值进行分词处理。"ignore_above"参数用于限制字段值的长度,超过这个长度的字段值将被忽略,不会被索引。如果字段值的长度超过了"ignore_above"设置的值,Elasticsearch将无法正确处理这些超长的字段值,导致倒排索引失效。



所以模糊查询时 最好对设置字段类型设置text并设置keyword分词器,这样字段不会被分词,也不会超长被截取@Field(type = FieldType.Text, searchAnalyzer = "keyword", analyzer = "keyword")  因为@Field(type = FieldType.Keyword)  这种类型的字段 默认长度是256 并且spring-data-es无法通过注解参数扩展

 

关于检索时字段是否要携带 .keyword字段的问题

   1  上面已经说过,String类型会默认创建text和keyword的倒排索引,所以这种情况下要使用精确查询或者使用keyword模糊查询, 需要在字段后拼接 .keyword

   2  当string类型字段设置@Field(type = FieldType.Keyword) 或者 @Field(type = FieldType.text)等 时则不需要拼接 .keyword,否则查询不出数据

    

 

posted @   小小的流星  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示