查询return在elasticsearch上的搜索差异

Query return the search difference on elasticsearch

以下查询看起来如何:

场景:

我有两个基数(基数1和2),每个基数有1列,我想看看它们之间的区别,即基数1中存在什么基数 2 中不存在,将列的虚构名称视为主机名。

示例:

Base1.Hostname 的选定值用于 Base2.Hostname?

YES → DO NOT RETURN
NO  → RETURN

我在 python 中有这个用于以下功能:

def diff(first, second):
        second = set (second)
        return [item for item in first if item not in second]

示例匹配等于:

GET /base1/_search
{
  "query": {
    "multi_match": {
      "query": "webserver",
      "fields": [
        "hostname"
      ],
      "type": "phrase"
    }
  }
}

我想将此架构迁移到弹性搜索,以便将来根据这些 search 在基础

中的变化频率生成 forecast

这可以通过聚合来完成。

  1. 从 base1 和 base2 索引中收集所有主机名
  2. 对于每个主机名在 base2 中的出现次数
  3. 只保留 base2 计数为 0 的桶
GET base*/_search
{
  "size": 0,
  "aggs": {
    "all": {
      "composite": {
        "size": 10, 
        "sources": [
          {
            "host": {
              "terms": {
                "field": "hostname"
              }
            }
          }
        ]
      },
      "aggs": {
        "base2": {
          "filter": {
            "match": {
              "_index": "base2"
            }
          }
        },
        "index_count_bucket_filter": {
          "bucket_selector": {
            "buckets_path": {
              "base2_count": "base2._count"
            },
            "script": "params.base2_count == 0"
          }
        }
      }
    }
  }
}

顺便说一句,不要忘记使用分页来获取其余结果。

参考文献:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html
  2. https://discuss.elastic.co/t/data-set-difference-between-fields-on-different-indexes/160015/4