【问题标题】:Query to compare two columns from two different indexes查询以比较来自两个不同索引的两列
【发布时间】:2019-09-06 05:36:37
【问题描述】:

我在一个索引中有一个列,其中包含多个国家,我想检查这些国家是否与另一个索引中的列中的国家相似或相同。

就像是,在一个索引中,我们有用户指定国家/地区的用户数据,而在另一个索引中,我们有实际国家/地区的主数据。所以现在我想检查用户输入的国家是否与主数据中的相同。

如果有人知道如何在 Kibana 中为此编写查询,请提供帮助。

GET final,master/_count

{"query": {"bool": {"must": [{"script": {"script":"['A_OPERATINGCOUNTRY'].value == ['AD_Country Name.keyword'].value"}}]}}}

【问题讨论】:

    标签: elasticsearch kibana-7


    【解决方案1】:

    您需要在 Elasticsearch 之外进行管理。但是,既然传入的数据没有你想要的国家名称,你为什么要在 Elasticsearch 上检查呢?您使用的表单应该具有您想要索引的确切值。

    【讨论】:

      【解决方案2】:

      您可以使用terms query

      假设我们有一个这样的页面访问日志索引:

      PUT /mybeat-2018/_doc/1
      {
          "host" : "elastic.co",
          "ttl" : 40
      }
      
      PUT /mybeat-2018/_doc/2
      {
          "host" : "elastic.co",
          "ttl" : 666
      }
      
      PUT /mybeat-2018/_doc/3
      {
          "host" : "google.com",
          "ttl" : 55
      }
      

      还有一个可以缩小或增长的独立白名单,拥有一堆主机:

      PUT /whitelist/_doc/1
      {
       "hosts" : [
         {
           "name" : "elastic.co"
         },
         {
           "name" : "twitter.com"
         }
       ]
      }
      

      然后在 mybeat-* 上搜索白名单中的任何内容都应该引用白名单文档(在我们的例子中是 id 为 1 的文档),如下所示:

      GET /mybeat-*/_search
      {
          "query" : {
              "terms" : {
                  "host" : {
                      "index" : "whitelist",
                      "type" : "_doc",
                      "id" : "1",
                      "path" : "hosts.name"
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多