Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Поиск данных

Извлекатели

Извлекатель — это абстракция, добавленная в API поиска в 8.14.0 и ставшая общедоступной в 8.16.0. Эта абстракция позволяет настроить многоэтапные конвейеры извлечения в рамках одного _search вызова. Это упрощает логику вашего приложения поиска, поскольку вам больше не нужно настраивать сложные запросы с помощью нескольких вызовов Elasticsearch или реализовывать дополнительную логику на стороне клиента для объединения результатов разных запросов.

Этот документ предоставляет общее описание абстракции извлекателя. Подробности реализации, включая заметные ограничения, можно найти в документации по справке в _search документации API.

Типы извлекателей

Извлекатели бывают разных типов, каждый из которых предназначен для разных операций поиска. В настоящее время доступны следующие извлекатели:

  • Стандартный извлекатель. Возвращает лучшие документы из традиционного запроса. Имитирует традиционный запрос в контексте системы извлекателей. Это обеспечивает обратную совместимость, так как поддерживаются существующие _search запросы. Таким образом, вы можете перейти к новой абстракции в своем темпе, не смешивая синтаксисы.
  • kNN Извлекатель. Возвращает лучшие документы из поиска kNN в контексте системы извлекателей.
  • RRF Извлекатель. Объединяет и сортирует несколько извлекателей первого этапа с использованием алгоритма взаимного ранжирования (RRF). Позволяет объединить несколько наборов результатов с различными показателями релевантности в один набор результатов. RRF извлекатель — это составной извлекатель, где его filter элемент передается подчинённым извлекателям.
  • Извлекатель правил запроса. Применяет правила запроса к запросу перед возвратом результатов.
  • Извлекатель-переранжировщик по схожести текста. Используется для семантического переранжирования. Требует предварительного создания rerank задачи с использованием API вывода Elasticsearch Elasticsearch Inference API.

Что делает извлекатели полезными?

Вот обзор того, что делает извлекатели полезными и как они отличаются от обычных запросов.

  1. Упрощенный пользовательский опыт. Извлекатели упрощают пользовательский опыт, позволяя настраивать целые конвейеры извлечения в одном вызове API. Это сохраняет обратную совместимость с традиционными элементами запроса, автоматически переводя их в соответствующий извлекатель.
  2. Структурированный поиск. Извлекатели обеспечивают более структурированный способ определения операций поиска. Они позволяют описывать запросы с помощью «дерева извлекателей» — иерархической структуры, которая проясняет последовательность и логику операций, делая сложные запросы более понятными и управляемыми.
  3. Компонуемость и гибкость. Извлекатели обеспечивают гибкую компонуемость, позволяя создавать конвейеры и беспрепятственно интегрировать различные стратегии извлечения в эти конвейеры. Извлекатели упрощают тестирование различных комбинаций стратегий извлечения.
  4. Составные операции. Извлекатель может иметь подчинённые извлекатели. Это позволяет выполнять сложные вложенные запросы, где результаты одного извлекателя передаются другому, поддерживая сложные стратегии запросов, которые могут включать несколько этапов или критериев.
  5. Извлечение как концепция первого класса. В отличие от традиционных запросов, где запрос является частью более крупного вызова API поиска, извлекатели спроектированы как автономные сущности, которые можно объединять или использовать изолированно. Это позволяет использовать более модульный и гибкий подход к построению запросов.
  6. Улучшенный контроль над оценкой и ранжированием документов. Извлекатели позволяют более явно контролировать способ оценки и фильтрации документов. Например, вы можете указать минимальные пороги оценки, применять сложные фильтры без влияния на оценку и использовать параметры, такие как terminate_after для оптимизации производительности.
  7. Интеграция с существующими возможностями Elasticsearch. Несмотря на то, что извлекатели могут использоваться вместо существующего _search синтаксиса API (такого как query и knn), они разработаны для бесшовной интеграции с такими элементами, как постраничная навигация (search_after) и сортировка. Они также сохраняют совместимость с операциями агрегации, рассматривая комбинацию всех листов извлекателей как should клаузулы в булевом запросе.
  8. Более чистая разделение ответственности. При использовании составных извлекателей разрешен только элемент запроса, что обеспечивает более чистую разделение ответственности и предотвращает сложность, которая может возникнуть из чрезмерно вложенных или взаимозависимых конфигураций.

Пример

GET example-index/_search
{
  "retriever": {
    "rrf": {
      "retrievers": [
        {
          "standard": {
            "query": {
              "sparse_vector": {
                "field": "vector.tokens",
                "inference_id": "my-elser-endpoint",
                "query": "What blue shoes are on sale?"
              }
            }
          }
        },
        {
          "standard": {
            "query": {
              "match": {
                "text": "blue shoes sale"
              }
            }
          }
        }
      ]
    }
  }
}

Этот пример демонстрирует, как вы можете объединить различные стратегии извлечения в один retriever конвейер.

Сравните с RRF с sub_searches подходом (который устарел начиная с 8.16.0):

Развернуть для примера
GET example-index/_search
{
  "sub_searches":[
    {
      "query":{
        "match":{
          "text":"blue shoes sale"
        }
      }
    },
    {
      "query":{
        "sparse_vector": {
            "field": "vector.tokens",
            "inference_id": "my-elser-endoint",
            "query": "What blue shoes are on sale?"
          }
        }
      }
  ],
  "rank":{
    "rrf":{
      "rank_window_size":50,
      "rank_constant":20
    }
  }
}

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

Глоссарий

Вот некоторые важные термины:

  • Конвейер извлечения. Определяет всю логику извлечения и ранжирования для получения лучших результатов.
  • Дерево извлекателей. Иерархическая структура, определяющая взаимодействие извлекателей.
  • Извлекатель первого этапа. Возвращает начальный набор кандидатных документов.
  • Составной извлекатель. Строится на основе одного или нескольких извлекателей, улучшая логику извлечения и ранжирования документов.
  • Комбинаторы. Составные извлекатели, которые объединяют лучшие результаты от нескольких подчинённых извлекателей.
  • Переранжировщики. Специальные составные извлекатели, которые упорядочивают результаты и могут изменять количество результатов, с различиями между переранжировщиками первого и второго этапов.

Извлекатели в действии

Игровой центр поиска Elasticsearch строит запросы Elasticsearch с использованием абстракции извлекателя. Он автоматически определяет поля и типы в вашем индексе и строит дерево извлекателей на основе ваших выборов.

Вы можете использовать Игровой центр, чтобы экспериментировать с различными конфигурациями извлекателей и посмотреть, как они влияют на результаты поиска.

Дополнительную информацию см. в документации по Игровому центру.

Справочник по API

Подробности реализации, включая заметные ограничения, см. в документации по справке в документации API поиска.

Узнайте, как комбинировать различные извлекатели в этих практических примерах.

© 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/retrievers-overview.html

Spec-Zone.ru

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