elasticsearch中的数据类型:flattened和join

这篇具有很好参考价值的文章主要介绍了elasticsearch中的数据类型:flattened和join。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

flattened:比如你有一个字段的值是一个json,这个json里面又有很多字段,你又不想一个一个的定义这些字段到mapping,就可以用flattened

直接动手:创建索引:

PUT person
{
  "mappings": {
    "properties": {
      "patient_name": {
        "type": "text"
      },
      "detail": {
        "type": "flattened"
      }
    }
  }
}

注意这里detail字段类型为flattened, 然后插入文档:

PUT person/_doc/1
{
  "patient_name": "John Doe",
  "detail": {
    "age": 143,
    "skills": [
      "java",
      "python",
      "ai"
    ],
    "history": "none",
    "friends": [
      "Neo",
      "James",
      "Tony Stark"
    ]
  }
}

然后搜索:

GET person/_search
{
  "query": {
    "match": {
      "detail": "java"
    }
  }
}

注意这里直接搜索detail,可以搜索到我们刚刚插入的那个文档,但是我们也可以搜索detail.skills,比如

"detail.skills": "java"

也能搜索到那个文档,但是如果我们这样搜索就搜索不到:

"detail.friends": "java"

还有一点,这里的每个字段会被定义成keyword类型,所以你如果这样搜索就搜索不到:

"detail.friends": "Tony"

你必须完全匹配才能搜索的到:

"detail.friends": "Tony Stark"

 

再来看看join类型,说的是一个索引里面一个文档和其他几个文档有关联,比如几个文档的父文档都是那一个文档,动手:

先创建索引:

PUT person2
{
  "mappings": {
    "properties": {
      "relationship": {
        "type": "join",
        "relations": {
          "star": "fans"
        }
      }
    }
  }
}

这里relationship是一个字段名,类型是join,指的明星和粉丝的关系,所以里面有一个类型的参数relations,它的取值star:fans分别表示父和子的关联类型,后面会用到。

插入文档,首先是父文档:

PUT person2/_doc/1
{
  "name": "star1",
  "relationship": {
    "name": "star"
  }
}

这里的relationship.name是star,这个值是在前面mapping里面定义的,前面提到过,如果你写个super_star,就会报错:

unknown join name [super_star] for field [relationship]

 

然后插入第一个子文档:

PUT person2/_doc/2?routing=tony
{
 "name":"fan1",
 "relationship":{
 "name":"fans",
 "parent":1
 }
}

注意这里有个routing参数,如果插入子文档的时候没有指定routing是会报错的,这是为了将相关的文档分配到相同的分片,比如后面插入第二个子文档真爱粉的时候也指定相同的路由参数值。

[routing] is missing for join field [relationship]

还有这里的relationship.name是fans,也是在前面mapping里面定义的。

指定parent是1,就确定了父子文档的关系。

最后插入第二个子文档:

PUT person2/_doc/3?routing=tony
{
 "name":"fan2",
 "relationship":{
 "name":"fans",
 "parent":1
 }
}

路由参数一样,下面查询:

GET person2/_search
{
  "query": {
    "parent_id": {
      "type": "fans",
      "id": 1
    }
  }
}

可以查到两个子文档,两个子文档,但是不包括父文档:

    "hits" : [
      {
        ..."_routing" : "tony",
        "_source" : {
          "name" : "fan1",
          "relationship" : {
            "name" : "fans",
            "parent" : 1
          }
        }
      },
      {
        ..."_routing" : "tony",
        "_source" : {
          "name" : "fan2",
          "relationship" : {
            "name" : "fans",
            "parent" : 1
          }
        }
      }

如果插入第二个子文档的时候指定路由参数是neo,也可以搜索到两个子文档,不影响搜索,但不建议这样做。

PUT person2/_doc/3?routing=neo

还有要注意的是如果查询的时候,指定parent_id.type为star会报错:
GET person2/_search
{
  "query": {
    "parent_id": {
      "type": "star",
      "id": 1
    }
  }
}

报错如下:

[parent_id] no relation found for child [star]

也就是说这里要指定的是子文档的关联类型

 

 文章来源地址https://www.toymoban.com/news/detail-650632.html

 
 

到了这里,关于elasticsearch中的数据类型:flattened和join的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch的数据类型与映射

    Elasticsearch是一个分布式、实时的搜索和分析引擎,它可以处理大量数据并提供快速、准确的搜索结果。在Elasticsearch中,数据类型和映射是两个重要的概念,它们在存储和查询数据时起着关键的作用。本文将深入探讨Elasticsearch的数据类型与映射,揭示其核心概念、算法原理、

    2024年02月19日
    浏览(29)
  • 使用Elasticsearch进行数据类型转换优化

    在本文中,我们将探讨如何使用Elasticsearch进行数据类型转换优化。Elasticsearch是一个强大的搜索和分析引擎,它可以处理大量数据并提供实时搜索功能。然而,在处理数据时,我们可能需要对数据类型进行转换,以便更有效地存储和查询数据。 Elasticsearch是一个基于Lucene的搜索

    2024年02月21日
    浏览(31)
  • elasticsearch 常用数据类型详解和范例

    elasticsearch 中的字符串(keyword)类型 的详解和范例 elasticsearch 中的字符串/文本(text)类型 的详解和范例 elasticsearch 中的数字(数值)类型 的详解和范例 elasticsearch 中的布尔(boolean)类型 的详解和范例 elasticsearch 中的日期(date)类型 的详解和范例 elasticsearch 中的地理(

    2024年02月09日
    浏览(26)
  • 深入了解ElasticSearch的Nested数据类型

    这个时候就需要用到nested,nested类型是object数据类型的特殊版本,它允许对象数组以一种可以相互独立查询的方式进行索引。 在Nested内部,每个对象索引其实是一个单独的隐藏文档,这意味着每个嵌套对象都可以独立于其他对象进行查询。 使用Nested需要先创建索引,依旧通

    2024年04月10日
    浏览(68)
  • Elasticsearch (ES) 搜索引擎: 数据类型、动态映射、多类型(子字段)

    原文链接:https://xiets.blog.csdn.net/article/details/132348634 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) ES 映射字段的 数据类型 ,官网文档参考:Field data types。 下面是 ES 常用的一些基本数据类型。 字符串 类型: keyword :类型。 text :文本类型。

    2024年03月23日
    浏览(52)
  • (五) ElasticSearch 数据类型和文档CRUD操作

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_complex_datatypes 核心数据类型是 Elasticsearch 最基本和常用的数据类型,用于存储大部分数据。这些核心数据类型包括: Text(文本):用于存储长文本数据,进行全文搜索和分析。 Keyword():

    2024年02月11日
    浏览(27)
  • oracle中的数据类型和java中的数据类型的对应关系

    oracle中的的date 对应java中的 java.util.date java.sql.date 是都可以的 但通常使用java.util.date 因为它的作用范围大于java.sql.date

    2024年02月09日
    浏览(35)
  • Elasticsearch:dense vector 数据类型及标量量化

    密集向量(dense_vector)字段类型存储数值的密集向量。 密集向量场主要用于 k 最近邻 (kNN) 搜索。 dense_vector 类型不支持聚合或排序。 默认情况下,你可以基于 element_type 添加一个 dend_vector 字段作为 float 数值数组: 注意 :与大多数其他数据类型不同,密集向量始终是单值。

    2024年03月23日
    浏览(43)
  • Elasticsearch:更改索引中字段的数据类型的方法

    1.问题描述:         需要将已有索引中的已有字段作为新的查询条件,需求中需要对该字段进行范围查询,当前字段为keyword类型的数字,此时发现查询所得结果与预期不符合。 2.问题拆解: 2.1发现问题: 索引字段数据类型不合理 2.2问题本质: 需要将keyword类型的转换成

    2024年02月08日
    浏览(38)
  • es elasticsearch 八 mapping 映射 、复杂数据类型

    目录 Mapping 映射 复杂数据类型 Mapping 映射 精确匹配 必须和对应字段值安全一致才可查出 全文检索 缩写搜索全程、格式转换 大小写 同义词 全文检索核心原理 分词,初步的倒排索引的建立 重建倒排索引 时态转换、重复数的转换、同义词的转换、大小写的转换 分词器 analy

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包