一个业务系统之前用的是 ES6.x 的,查询里的 filter 写的是
{
terms:{
eventName:[
"xxx"
]
}
}
然后换了个 ES7.x 的版本 这个查询就查不到数据了 要改成
{
terms:{
eventName.keyword:[
"xxx"
]
}
}
eventName 要改成 eventName.keyword 才有数据 请问这个查询怎么兼容,我翻了一下 es 的更新日志也没有发现相关的变更项
![]() |
1
Oktfolio 49 天前
text 类型没法精确匹配
|
![]() |
2
sujin190 49 天前
ES7.x 和 ES6.x 的数据结构不一样,想要一样,需要调整 es mapping 的配置吧
|
![]() |
3
DonaldY 49 天前
term 用于 keyword 。
|
![]() |
4
zzl22100048 49 天前
你们迁移数据的时候没有配置索引指定字段类型,es 动态 mapping ,string 是 text 类型,加上一个 keyword 的 field
|
5
zitionguo 49 天前 ![]() 重建索引吧,mapping 里边 eventName 由 text -> keyword
|
![]() |
6
misaka19000 48 天前
看 mapping
|
![]() |
7
Morriaty 48 天前
这个和 es version 没关系,可以看下 https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html ,写的是 es 2.0 ,但道理一样
|
![]() |
8
decken 48 天前
感觉是换了版本之后 mapping 改了 贴上 2 次的 mapping 吧
|
![]() |
9
redorblacck886 48 天前
matchQuery:会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到。
termQuery:不会对搜索词进行分词处理,而是作为一个整体与目标字段进行匹配,若完全匹配,则可查询到。 |
10
zmal 48 天前 ![]() 可能你用的是 ES 自动生成的 mapping ,没有自定义。无需分词的字符串字段改成 keyword 。
|
![]() |
11
sadfQED2 48 天前 via Android
目测你没有给这个字段加 keyword 类型的 field ,直接贴你的 mapping 上来吧
|