Elasticsearch максимальное количество документов для каждого индекса - PullRequest
0 голосов
/ 13 июня 2019

У меня есть два отдельных индекса A и B с псевдонимом X. Оба индекса имеют одинаковую структуру документа. Когда я выполняю поиск с размером = 20 по псевдониму X, я хочу установить максимальный размер документа 5 для индекса B. Результат поиска должен содержать не более 5 документов из индекса B. Если в индексе B нет документа, результат поиска должен содержать 20 документов. из индекса А.

Есть ли какое-либо решение для установки максимального числа документов на индекс для поиска по нескольким индексам с псевдонимом?

1 Ответ

1 голос
/ 13 июня 2019

Этого можно добиться, используя _msearch API.

Ниже приведен пример запроса, как вы можете применить это:

POST myalias/_msearch
{"index" : "myindex_news_sports"}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 1}
{"index" : "myindex_news_economics"}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 1}

Как правило, _msearch позволяет искать несколько запросов с использованием одного и того же API. Существует два разных запроса, в которых вы можете указать size для двух разных индексов.

Обратите внимание, что результаты будут отображаться в отдельных группах JSON (два результата, по одному для каждого запроса).

Пример ответа:

{
  "took" : 4,
  "responses" : [
    {                                  <---- Response for Index 1
      "took" : 4,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 2,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "myindex_news_sports",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "fooNested" : {
                "sigma" : 9,
                "theta" : 1
              }
            }
          },
          {
            "_index" : "myindex_news_sports",
            "_type" : "_doc",
            "_id" : "4",
            "_score" : 1.0,
            "_source" : {
              "fooNested" : {
                "sigma" : 9,
                "theta" : 1
              }
            }
          }
        ]
      },
      "status" : 200
    },
    {                                  <---- Response for Index 2
      "took" : 2,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 4,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "myindex_news_economics",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "fooNested" : {
                "sigma" : 9,
                "theta" : 1
              }
            }
          },
          {
            "_index" : "myindex_news_economics",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "fooNested" : {
                "sigma" : 9,
                "theta" : 1
              }
            }
          }
        ]
      },
      "status" : 200
    }
  ]
}

Не уверен, что это будет идеально для вас, я просто надеюсь, что это поможет.

...