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,否则查询不出数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!