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

ES中type和keyword两个数据类型的区别_第1张图片

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
转载说明:务必注明来源,附带本人博客连接。

你可能感兴趣的:(elasticsearch,elasticsearch,大数据,搜索引擎)