Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›Поиск данных ›API поиска

Поиск в нескольких потоках данных и индексах с помощью запроса

Существует два основных метода поиска по нескольким потокам данных и индексам в Elasticsearch:

  • Уровень запроса: Непосредственно укажите индексы в пути запроса поиска или используйте шаблоны индексов для определения нескольких индексов.
  • Уровень индекса: Используйте псевдонимы индексов, которые действуют как указатели на один или несколько базовых индексов, что позволяет логически сгруппировать и управлять индексами.

Для поиска по нескольким потокам данных и индексам добавьте их как значения, разделенные запятыми, в путь запроса API поиска.

Следующий запрос ищет в индексах my-index-000001 и my-index-000002.

resp = client.search(
    index="my-index-000001,my-index-000002",
    query={
        "match": {
            "user.id": "kimchy"
        }
    },
)
print(resp)
response = client.search(
  index: 'my-index-000001,my-index-000002',
  body: {
    query: {
      match: {
        'user.id' => 'kimchy'
      }
    }
  }
)
puts response
const response = await client.search({
  index: "my-index-000001,my-index-000002",
  query: {
    match: {
      "user.id": "kimchy",
    },
  },
});
console.log(response);
GET /my-index-000001,my-index-000002/_search
{
  "query": {
    "match": {
      "user.id": "kimchy"
    }
  }
}

Вы также можете искать в нескольких потоках данных и индексах с помощью шаблона индекса.

Следующий запрос обращается к шаблону индекса my-index-*. Запрос ищет все потоки данных или индексы в кластере, начинающиеся с my-index-.

resp = client.search(
    index="my-index-*",
    query={
        "match": {
            "user.id": "kimchy"
        }
    },
)
print(resp)
response = client.search(
  index: 'my-index-*',
  body: {
    query: {
      match: {
        'user.id' => 'kimchy'
      }
    }
  }
)
puts response
const response = await client.search({
  index: "my-index-*",
  query: {
    match: {
      "user.id": "kimchy",
    },
  },
});
console.log(response);
GET /my-index-*/_search
{
  "query": {
    "match": {
      "user.id": "kimchy"
    }
  }
}

Вы можете исключить определенные индексы из поиска. Запрос получит данные из всех индексов, начинающихся с my-index-, за исключением my-index-01.

resp = client.search(
    index="my-index-*",
    query={
        "bool": {
            "must": [
                {
                    "match": {
                        "user.id": "kimchy"
                    }
                }
            ],
            "must_not": [
                {
                    "terms": {
                        "_index": [
                            "my-index-01"
                        ]
                    }
                }
            ]
        }
    },
)
print(resp)
const response = await client.search({
  index: "my-index-*",
  query: {
    bool: {
      must: [
        {
          match: {
            "user.id": "kimchy",
          },
        },
      ],
      must_not: [
        {
          terms: {
            _index: ["my-index-01"],
          },
        },
      ],
    },
  },
});
console.log(response);
GET /my-index-*/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "user.id": "kimchy"
          }
        }
      ],
      "must_not": [
        {
          "terms": {
            "_index": ["my-index-01"]
          }
        }
      ]
    }
  }
}

Для поиска всех потоков данных и индексов в кластере опустите целевой параметр из пути запроса. В качестве альтернативы, вы можете использовать _all или *.

Следующие запросы эквивалентны и выполняют поиск во всех потоках данных и индексах в кластере.

resp = client.search(
    query={
        "match": {
            "user.id": "kimchy"
        }
    },
)
print(resp)

resp1 = client.search(
    index="_all",
    query={
        "match": {
            "user.id": "kimchy"
        }
    },
)
print(resp1)

resp2 = client.search(
    index="*",
    query={
        "match": {
            "user.id": "kimchy"
        }
    },
)
print(resp2)
response = client.search(
  body: {
    query: {
      match: {
        'user.id' => 'kimchy'
      }
    }
  }
)
puts response

response = client.search(
  index: '_all',
  body: {
    query: {
      match: {
        'user.id' => 'kimchy'
      }
    }
  }
)
puts response

response = client.search(
  index: '*',
  body: {
    query: {
      match: {
        'user.id' => 'kimchy'
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    match: {
      "user.id": "kimchy",
    },
  },
});
console.log(response);

const response1 = await client.search({
  index: "_all",
  query: {
    match: {
      "user.id": "kimchy",
    },
  },
});
console.log(response1);

const response2 = await client.search({
  index: "*",
  query: {
    match: {
      "user.id": "kimchy",
    },
  },
});
console.log(response2);
GET /_search
{
  "query": {
    "match": {
      "user.id": "kimchy"
    }
  }
}

GET /_all/_search
{
  "query": {
    "match": {
      "user.id": "kimchy"
    }
  }
}

GET /*/_search
{
  "query": {
    "match": {
      "user.id": "kimchy"
    }
  }
}

Усиление индексов

При поиске по нескольким индексам вы можете использовать параметр indices_boost для усиления результатов из одного или нескольких указанных индексов. Это полезно, когда результаты из некоторых индексов важнее результатов из других.

Вы не можете использовать indices_boost с потоками данных.

resp = client.search(
    indices_boost=[
        {
            "my-index-000001": 1.4
        },
        {
            "my-index-000002": 1.3
        }
    ],
)
print(resp)
response = client.search(
  body: {
    indices_boost: [
      {
        "my-index-000001": 1.4
      },
      {
        "my-index-000002": 1.3
      }
    ]
  }
)
puts response
const response = await client.search({
  indices_boost: [
    {
      "my-index-000001": 1.4,
    },
    {
      "my-index-000002": 1.3,
    },
  ],
});
console.log(response);
GET /_search
{
  "indices_boost": [
    { "my-index-000001": 1.4 },
    { "my-index-000002": 1.3 }
  ]
}

Псевдонимы и шаблоны индексов также могут быть использованы:

resp = client.search(
    indices_boost=[
        {
            "my-alias": 1.4
        },
        {
            "my-index*": 1.3
        }
    ],
)
print(resp)
response = client.search(
  body: {
    indices_boost: [
      {
        "my-alias": 1.4
      },
      {
        "my-index*": 1.3
      }
    ]
  }
)
puts response
const response = await client.search({
  indices_boost: [
    {
      "my-alias": 1.4,
    },
    {
      "my-index*": 1.3,
    },
  ],
});
console.log(response);
GET /_search
{
  "indices_boost": [
    { "my-alias":  1.4 },
    { "my-index*": 1.3 }
  ]
}

Если найдено несколько совпадений, будет использовано первое совпадение. Например, если индекс включён в alias1 и соответствует шаблону my-index*, применяется значение усиления 1.4.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/search-multiple-indices.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API