• ElasticSearch中的文档和查询响应数据


    在Elasticsearch中,文档以JSON格式进行存储,可以是复杂的结构,如:

    1. {
    2. "_index": "test",
    3. "_type": "user",
    4. "_id": "1005",
    5. "_version": 1,
    6. "_score": 1,
    7. "_source": {
    8. "id": 1005,
    9. "name": "孙七",
    10. "age": 37,
    11. "sex": "女",
    12. "card": {
    13. "card_number": "123456789"
    14. }
    15. }
    16. }

    如上所示,其中,card是一个复杂对象,嵌套的Card对象。

    元数据(metadata)

            一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。三个必须的元数据节点是:

    节点说明
    _index文档存储的地方
    _type文档代表的对象的类
    _id文档的唯一标识

    _index

            索引(index)类似于关系型数据库里的“数据库”——它是我们存储和索引关联数据的地方。

    提示: 事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节——我们的程序完全不用关心分片。对于我们的程序而言,文档存储在索引 (index)中。剩下的细节由Elasticsearch关心既可。

    _type

            在应用中,我们使用对象表示一些“事物”,例如一个用户、一篇博客、一个评论,或者一封邮件。每个对象都属于一个类(class),这个类定义了属性或与对象关联的数据。 user 类的对象可能包含姓名、性别、年龄和Email地址。

            在关系型数据库中,我们经常将相同类的对象存储在一个表里,因为它们有着相同的结构。同理,在Elasticsearch中,我们使用相同类型(type)的文档表示相同的“事物”,因为他们的数据结构也是相同的。

            每个类型(type)都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引。

            _type 的名字可以是大写或小写,不能包含下划线或逗号。我们将使用 blog 做为类型名。

    _id

            id仅仅是一个字符串,它与 _index 和 _type 组合时,就可以在Elasticsearch中唯一标识一个文档。当创建一个文档,可以自定义 _id ,也可以让Elasticsearch帮你自动生成(32位长度)。

    查询响应

    pretty

            在查询url后面添加pretty参数,使得返回的json更易查看。

    GET http://127.0.0.1:9200/test/user/1002?pretty

    指定响应字段

            在响应的数据中,如果不需要全部的字段,可以指定某些需要的字段进行返回。

    1. GET /test/user/1002
    2. # 响应数据
    3. {
    4. "_index": "test",
    5. "_type": "user",
    6. "_id": "1002",
    7. "_version": 5,
    8. "_seq_no": 10,
    9. "_primary_term": 1,
    10. "found": true,
    11. "_source": {
    12. "id": 1002,
    13. "name": "李四",
    14. "age": 23,
    15. "sex": "女"
    16. }
    17. }

    1. GET /test/user/1002?_source=id,name
    2. # 响应数据
    3. {
    4. "_index": "test",
    5. "_type": "user",
    6. "_id": "1002",
    7. "_version": 5,
    8. "_seq_no": 10,
    9. "_primary_term": 1,
    10. "found": true,
    11. "_source": {
    12. "name": "李四",
    13. "id": 1002
    14. }
    15. }

     如不需要返回元数据,仅仅返回原始数据也是可以的

    1. GET /test/user/1002/_source
    2. # 响应数据
    3. {
    4. "id": 1002,
    5. "name": "李四",
    6. "age": 23,
    7. "sex": "女"
    8. }

    1. GET /test/user/1002/_source?_source=id,name
    2. # 响应数据
    3. {
    4. "name": "李四",
    5. "id": 1002
    6. }

  • 相关阅读:
    微信小程序中识别HTML标签的方法
    学校常见的网络舆情风险点及防控措施有哪些?
    linux 中普通用户能够执行 ping 命令的机关
    Python学习(一)基础语法
    MySQL安装及应用合集(6):MySQL函数快速验证方法
    FreeSql 将 Saas 租户方案精简到极致[.NET ORM]
    对话框管理器第一章:先热热身
    软件测试周刊(第84期):这个世界根本不存在“不会做”、“不能做”,只有“不想做”和“不敢做”,当你失去所有依靠的时候,你自然就什么都会了。
    解密游戏推荐系统的建设之路
    灾备建设中的网络传输
  • 原文地址:https://blog.csdn.net/weixin_44799217/article/details/126089504