【问题标题】:Elastic search/kibana get data from 2 documents of same Index?弹性搜索/kibana 从相同索引的 2 个文档中获取数据?
【发布时间】:2019-12-26 08:12:57
【问题描述】:

我在弹性搜索 data-production 中有 1 个索引用于存储文档。该索引在每个文档中都有一个公共字段,名为:document_type,用于过滤不同类型的数据。

我在索引中有 2 种类型的文档:数据生产

一个。 document_type = "用户"

b. document_type = "user_detail"

示例数据

  1. 用户
        {
          "user_id" : "123",
          "is_trial_active" : "true",
          "updated_at" : "1577338950969",
          "event_created_at" : "1577338950969",
          "document_type" : "user"
        }
  1. 用户详情
    {         
       "user_id" : "123",
       "name" : "Shivam",
       "gender" : "male",
       "event_created_at" : 1575519449473,
       "phone_number" : "+91-8383838383",
       "document_type" : "user_detail",
       "created_at" : 1576049770184
    }

注意

  1. user_id 是两个 document_type 中的公共键
  2. 使用elasticsearch 7.3.1版本

问题

如何从 document_type="user_details" 中获取 is_trial_activedocument_type="user" 中不为真的用户的详细信息?

【问题讨论】:

  • 嗨@Shivam,我很确定你不能通过单个查询来实现这一点(对不起!)。
  • 嘿@baitmbarek,应该有一些方法来实现这一点?一些嵌套查询?我想为 kibana 可视化执行此操作。
  • 事实上,这些文档在技术上是不相关的,并且可能分布在不同的分片中。 Kibana 将无法为您执行此操作。
  • 如果使用join数据类型,可以建立它们之间的关系,但会影响性能。如果您愿意,我可以向您展示一个完整的示例。
  • 太棒了!我坚持你不能。您可以查看 Javin 或 Assael 的答案。您必须在映射中定义父/子关系才能使其工作。但是你为什么不合并你的文档(用户和详细信息)?

标签: elasticsearch amazon-elastic-beanstalk kibana elastic-stack kibana-7


【解决方案1】:

一个工作示例:

映射

PUT my_index
{
  "mappings": {
    "properties": {
      "document_type": {
        "type": "join",
        "relations": {
          "user": "user_detail"
        }
      }
    }
  }
}

发布一些文件

PUT my_index/_doc/1
{
  "user_id": "123",
  "is_trial_active": "false", ---> note i changed this to false for the example
  "updated_at": "1577338950969",
  "event_created_at": "1577338950969",
  "document_type": "user"
}

PUT my_index/_doc/2?routing=1
{
  "user_id": "123",
  "name": "Shivam",
  "gender": "male",
  "event_created_at": 1575519449473,
  "phone_number": "+91-8383838383",
  "created_at": 1576049770184,
  "document_type": {
    "name": "user_detail",
    "parent": "1"  --> you can insert array of parents
  }
}

搜索查询

GET my_index/_search
{
  "query": {
    "has_parent": {
      "parent_type": "user",
      "query": {
        "bool": {
          "must_not": [
            {
              "term": {
                "is_trial_active": {
                  "value": "true"
                }
              }
            }
          ]
        }
      }
    }
  }
}

结果

"hits" : [
  {
    "_index" : "my_index",
    "_type" : "_doc",
    "_id" : "2",
    "_score" : 1.0,
    "_routing" : "1",
    "_source" : {
      "user_id" : "123",
      "name" : "Shivam",
      "gender" : "male",
      "event_created_at" : 1575519449473,
      "phone_number" : "+91-8383838383",
      "created_at" : 1576049770184,
      "document_type" : {
        "name" : "user_detail",
        "parent" : "1"
      }
    }
  }
]

希望对你有帮助

【讨论】:

    【解决方案2】:

    您可以使用has_parent 查询来检索子文档

    希望以下查询对您有用

    GET data-production/_search
    {
      "query": {
        "has_parent": {
          "parent_type": "user",
          "query": {
            "bool": {
              "must_not": [
                {
                  "term": {
                    "is_trial_active": {
                      "value": "true"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 2018-07-21
      • 2021-10-20
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多