• ES中type和keyword两个数据类型的区别


    前言

    这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱

    参考文章:

    • https://segmentfault.com/q/1010000017312707

    • ES数据类型:type与keyword:https://blog.csdn.net/ywb201314/article/details/112667516

    了解

    1. 数据类型
      • 简单的类型: text、keyword、date、long、double、boolean和ip
      • 复杂类型有:object和nested
      • 较特殊的类型:geo_point,geo_shape,和completion
    2. 当你没有以Explicit mapping 的形式为你的索引字段预先指定mapping的话,ES就会使用Dynamic Mapping,通过推断你传入的文档中字段的值对字段进行动态映射

    比如你直接在文档中直接传入字段"name":"小陈",那么es就会动态映射如下mapping

    image-20220330175810765

    text和keyword的对比

    ES5.0及以后的版本取消了string类型,将原先的string类型拆分为textkeyword两种类型。它们的区别在于text会对字段进行分词处理而keyword则不会。前者会对查询内容做分词处理之后再匹配,而后者则是直接对查询结果做精确匹配。

    1. 在Elasticsearch中,正常添加数据,ES会自动识别所添加数据的类型,并为它分配类型,并为每个特殊类型分别建索引,以用来进行之后的搜索,而作为全文搜索引擎,ES将String域的字段可以分为准确数据类型,和全文文本类型
      • 准确数据类型: keyword,直接被存储为了二进制,检索时我们直接匹配,不匹配就返回false
      • 全文文本类型: text,这个的检索不是直接给出是否匹配,而是检索出相似度,并按照相似度由高到低返回结果
    2. 也就是说text是将字段拆分,然后找到最匹配拿哪项(无法全匹配),keyword是全匹配才可以
    3. ES的term query做的是精确匹配而不是分词查询,因此对text类型的字段做term查询将是查不到结果的(除非字段本身经过分词器处理后不变,未被转换或分词)。此时,必须使用foobar.keyword来对foobar字段以keyword类型进行精确匹配。

    作者:神的孩子都在歌唱
    本人博客:https://blog.csdn.net/weixin_46654114
    转载说明:务必注明来源,附带本人博客连接。

  • 相关阅读:
    【2016NOIP普及组】T3:海港 试题解析
    英飞凌TC3xx的LMU SRAM保护机制(一)
    postgres 多面、多线转换成单线或者单面
    wordpress网站搭建(centos stream 9)
    HTML5期末考核大作业——学生网页设计作业源码HTML+CSS+JavaScript 中华美德6页面带音乐文化
    ubutu18.04 使用update-alternatives 对python和python3进行版本管理
    微信小程序中长按识别二维码
    MogaFX—什么银行兑换外币?
    基础-MVP定位-轮廓比对算子
    【VUE 嵌套路由】
  • 原文地址:https://blog.csdn.net/weixin_46654114/article/details/132824014