咨询一个 ES 的问题

讨论 未结 8 47
lslvxy
lslvxy 会员 2022年6月20日 01:56 发表
<p>一个业务系统之前用的是 ES6.x 的,查询里的 filter 写的是</p> <pre><code class="language-json">{ terms:{ eventName:[ "xxx" ] } } </code></pre> <p>然后换了个 ES7.x 的版本 这个查询就查不到数据了 要改成</p> <pre><code class="language-json">{ terms:{ eventName.keyword:[ "xxx" ] } } </code></pre> <p>eventName 要改成 eventName.keyword 才有数据 请问这个查询怎么兼容,我翻了一下 es 的更新日志也没有发现相关的变更项</p>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
8个回复
  • sujin190
    2022年6月20日 01:56
    ES7.x 和 ES6.x 的数据结构不一样,想要一样,需要调整 es mapping 的配置吧
    0 0
  • zzl22100048
    2022年6月20日 02:28
    你们迁移数据的时候没有配置索引指定字段类型,es 动态 mapping ,string 是 text 类型,加上一个 keyword 的 field
    0 0
  • zitionguo
    2022年6月20日 02:28
    重建索引吧,mapping 里边 eventName 由 text -> keyword
    0 0
  • Morriaty
    2022年6月20日 03:27
    这个和 es version 没关系,可以看下 ,写的是 es 2.0 ,但道理一样
    0 0
  • decken
    2022年6月20日 03:27
    感觉是换了版本之后 mapping 改了 贴上 2 次的 mapping 吧
    0 0
  • redorblacck886
    2022年6月20日 03:27
    matchQuery:会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到。 termQuery:不会对搜索词进行分词处理,而是作为一个整体与目标字段进行匹配,若完全匹配,则可查询到。
    0 0