以下查询的外观如何:

方案:

我有两个基础(基础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"
    }
  }
}

我想将此架构迁移到 flex 搜索,以便将来以这些forecast的变化频率为基础生成search

最佳答案

这可以通过聚合来完成。

  • 从base1和base2索引
  • 收集所有主机名
  • 对于每个主机名,在base2中的出现次数为
  • 仅保留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"
              }
            }
          }
        }
      }
    }
    

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

    引用文献:
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html
  • https://discuss.elastic.co/t/data-set-difference-between-fields-on-different-indexes/160015/4
  • 07-28 12:17