V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lslvxy
V2EX  ›  程序员

咨询一个 ES 的问题

  •  
  •   lslvxy · 49 天前 · 1660 次点击
    这是一个创建于 49 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个业务系统之前用的是 ES6.x 的,查询里的 filter 写的是

    {
      terms:{
        eventName:[
        "xxx"
        ]
      }
    }
    

    然后换了个 ES7.x 的版本 这个查询就查不到数据了 要改成

    {
      terms:{
        eventName.keyword:[
        "xxx"
        ]
      }
    }
    

    eventName 要改成 eventName.keyword 才有数据 请问这个查询怎么兼容,我翻了一下 es 的更新日志也没有发现相关的变更项

    11 条回复    2022-06-20 12:19:22 +08:00
    Oktfolio
        1
    Oktfolio  
       49 天前
    text 类型没法精确匹配
    sujin190
        2
    sujin190  
       49 天前
    ES7.x 和 ES6.x 的数据结构不一样,想要一样,需要调整 es mapping 的配置吧
    DonaldY
        3
    DonaldY  
       49 天前
    term 用于 keyword 。
    zzl22100048
        4
    zzl22100048  
       49 天前
    你们迁移数据的时候没有配置索引指定字段类型,es 动态 mapping ,string 是 text 类型,加上一个 keyword 的 field
    zitionguo
        5
    zitionguo  
       49 天前   ❤️ 1
    重建索引吧,mapping 里边 eventName 由 text -> keyword
    misaka19000
        6
    misaka19000  
       48 天前
    看 mapping
    Morriaty
        7
    Morriaty  
       48 天前
    这个和 es version 没关系,可以看下 https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html ,写的是 es 2.0 ,但道理一样
    decken
        8
    decken  
       48 天前
    感觉是换了版本之后 mapping 改了 贴上 2 次的 mapping 吧
    redorblacck886
        9
    redorblacck886  
       48 天前
    matchQuery:会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到。

    termQuery:不会对搜索词进行分词处理,而是作为一个整体与目标字段进行匹配,若完全匹配,则可查询到。
    zmal
        10
    zmal  
       48 天前   ❤️ 1
    可能你用的是 ES 自动生成的 mapping ,没有自定义。无需分词的字符串字段改成 keyword 。
    sadfQED2
        11
    sadfQED2  
       48 天前 via Android
    目测你没有给这个字段加 keyword 类型的 field ,直接贴你的 mapping 上来吧
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4462 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 141ms · UTC 02:12 · PVG 10:12 · LAX 19:12 · JFK 22:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.