Elasticsearch запрос и агрегация по индексам - PullRequest
0 голосов
/ 06 марта 2019

У меня есть несколько индексов эластичного поиска, и я хотел бы получить doc_count того, сколько документов соответствует запросу для каждого индекса (даже если ни один документ не сопоставлен по индексу). Я попробовал это (используяasticsearch.js):

{
  index: 'one,or,many,indices,here',
  query: {
    query_string: {
      query: 'hello',
    },
  },
  aggs: {
    group_by_index: {
      terms: {
        field: '_index',
        min_doc_count: 0,
      },
    },
  },
  from: 0,
  size: 20,
};

Это работает, только если я указываю все индексы на клавише index. Однако я не всегда хочу сопоставлять документы по всем показателям в результатах поиска.

Итак, я придумал:

{
  index: 'all,indices,here',
  query: {
    bool: {
      must: [
        {
          query_string: {
            query: 'hello',
          },
        },
        {
          terms: {
            _index: 'only,search,hits,indices,here',
          },
        },
      ],
    },
  },
  aggs: {
    group_by_index: {
      terms: {
        field: '_index',
        min_doc_count: 0,
      },
    },
  },
  from: 0,
  size: 20,
};

Но тогда я получаю doc_count: 0 для индексов, где есть совпадения, потому что индекс отсутствует в запросе bool.

Как я могу получить doc_count для всех индексов, но не получить результаты поиска из нежелательных индексов?

1 Ответ

1 голос
/ 06 марта 2019

Вам нужно переместить ограничение индекса на post_filter

{
  index: 'all,indices,here',
  query: {
    bool: {
      must: [
        {
          query_string: {
            query: 'hello',
          },
        },
      ],
    },
  },
  aggs: {
    group_by_index: {
      terms: {
        field: '_index',
        min_doc_count: 0,
      },
    },
  },
  post_filter: {
    terms: {
      _index: 'only,search,hits,indices,here',
    },
  },
  from: 0,
  size: 20,
};
...