Запрос возврата поисковой разницы наasticsearch - PullRequest
0 голосов
/ 24 апреля 2020

Как будет выглядеть следующий запрос:

Сценарий:

У меня есть две базы (базы 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"
    }
  }
}

Я хотел бы перенести эту архитектуру в поиск elasti c, чтобы в будущем создать forecast с частотой изменения этих search в базах

1 Ответ

1 голос
/ 24 апреля 2020

Это можно сделать с агрегацией.

  1. Собрать все имена хостов из base1 & base2 index
  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
...