Обмен технологиями

Elasticsearch: Знакомство с ретриверами — поиск всего

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Автор: из ElasticДжефф Вестал, Джек Конрадсон

В версии 8.14 Elastic представила в Elasticsearch новую функцию поиска под названием «retrivers». Читайте дальше, чтобы узнать об их простоте и эффективности, а также о том, как они могут улучшить ваши поисковые операции.

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

Исходный тип ретривера

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

Доступные типы включают в себя:

  • стандартный - Возвращает документы верхнего уровня в традиционных запросах. Эти типы обратно совместимы благодаря поддержке существующего синтаксиса запросов DSL, что позволяет вам перейти на платформу сканера в удобном для вас темпе.
  • кНН - Возвращает самые популярные документы в поиске kNN.
  • РРФ - Используйте алгоритм взаимного слияния для объединения и ранжирования нескольких ретриверов первой стадии в единый набор результатов без каких-либо корректировок со стороны пользователя или с минимальными изменениями. RRF-ретривер — это составной ретривер, фильтрующие элементы которого распространяются на его дочерние ретриверы.

Чем ретриверы отличаются? Почему они полезны?

Для традиционных запросов запрос является частью общего вызова API поиска. Ретриверы отличаются тем, что они созданы как независимые объекты, которые можно использовать индивидуально или легко комбинировать. Этот модульный подход обеспечивает большую гибкость при разработке стратегий поиска.

Ретриверы разработаны как часть «дерева ретриверов», иерархической структуры, которая определяет операции поиска, уточняя их порядок и логику. Эта структура делает сложный поиск более управляемым, понятным для разработчиков и позволяет легко добавлять новые функции в будущем.

Retrievers поддерживают компоновку, позволяя создавать конвейеры и интегрировать различные стратегии поиска. Это позволяет легко тестировать различные комбинации поиска. Они также обеспечивают больший контроль над оценкой и фильтрацией документов. Например, вы можете указать минимальный порог оценки, применить сложные фильтры, не влияя на оценку, и использовать такие параметры, как terminate_after, для оптимизации производительности.

Поддерживает обратную совместимость с устаревшими элементами запроса, автоматически преобразуя их в соответствующие средства извлечения.

Пример использования извлечения

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

Вы можете запустить включенный Юпитер блокнот, импортируйте данные IMDB в свой проект бессерверного поиска и самостоятельно запустите следующие примеры!

Настройки высокого уровня:

  • обзор – краткое содержание фильма
  • имена - названия фильмов
  • обзор_плотный — плотный_вектор, созданный на основе маленькой модели e5.
  • обзор_sparse — разреженные векторы с использованием модели Elastic ELSER.
  • Использование только полей и установка _source:false возвращает текстовую версию имен и обзора.

Стандартный — поиск по всему тексту!

  1. GET /imdb_movies/_search?pretty
  2. {
  3. "retriever": {
  4. "standard": {
  5. "query": {
  6. "term": {
  7. "overview": "clueless"
  8. }
  9. }
  10. }
  11. },
  12. "size": 3,
  13. "fields": [
  14. "names",
  15. "overview"
  16. ],
  17. "_source": false
  18. }

kNN — Искать все плотные векторы!

  1. GET /imdb_movies/_search?pretty
  2. {
  3. "retriever": {
  4. "knn": {
  5. "field": "overview_dense",
  6. "query_vector_builder": {
  7. "text_embedding": {
  8. "model_id": ".multilingual-e5-small_linux-x86_64",
  9. "model_text": "clueless slackers"
  10. }
  11. },
  12. "k": 5,
  13. "num_candidates": 5
  14. }
  15. },
  16. "size": 3,
  17. "fields": [
  18. "names",
  19. "overview"
  20. ],
  21. "_source": false
  22. }

text_expansion — поиск по всем разреженным векторам!

  1. GET /imdb_movies/_search?pretty
  2. {
  3. "retriever": {
  4. "standard": {
  5. "query": {
  6. "text_expansion": {
  7. "overview_sparse": {
  8. "model_id": ".elser_model_2_linux-x86_64",
  9. "model_text": "clueless slackers"
  10. }
  11. }
  12. }
  13. }
  14. },
  15. "size": 3,
  16. "fields": [
  17. "names",
  18. "overview"
  19. ],
  20. "_source": false
  21. }

ррф - сочетает в себе все!

  1. GET /imdb_movies/_search?pretty
  2. {
  3. "retriever": {
  4. "rrf": {
  5. "retrievers": [
  6. {
  7. "standard": {
  8. "query": {
  9. "term": {
  10. "overview": "clueless slackers"
  11. }
  12. }
  13. }
  14. },
  15. {
  16. "knn": {
  17. "field": "overview_dense",
  18. "query_vector_builder": {
  19. "text_embedding": {
  20. "model_id": ".multilingual-e5-small_linux-x86_64",
  21. "model_text": "clueless slackers"
  22. }
  23. },
  24. "k": 5,
  25. "num_candidates": 5
  26. }
  27. },
  28. {
  29. "standard": {
  30. "query": {
  31. "text_expansion": {
  32. "overview_sparse": {
  33. "model_id": ".elser_model_2_linux-x86_64",
  34. "model_text": "clueless slackers"
  35. }
  36. }
  37. }
  38. }
  39. }
  40. ],
  41. "rank_window_size": 5,
  42. "rank_constant": 1
  43. }
  44. },
  45. "size": 3,
  46. "fields": [
  47. "names",
  48. "overview"
  49. ],
  50. "_source": false
  51. }

Текущий лимит ретривера

Ретривер имеет определенные ограничения, о которых следует знать пользователям. Например, использование составного ретривера позволяет запрашивать только элементы. Это обеспечивает более четкое разделение задач и предотвращает сложности, связанные с чрезмерным вложением или независимой конфигурацией. Кроме того, дочерние ретриверы не должны использовать элементы, которые ограничивают составной ретривер тем, что он является частью дерева ретриверов.

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

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

в заключение

Поисковые системы представляют собой важный шаг вперед в обеспечении функциональности поиска и удобства использования Elasticsearch. Их можно объединить в конвейерную цепочку, где каждый получатель применяет свою логику и передает результаты следующему элементу цепочки. Ретриверы могут значительно улучшить качество поиска, обеспечивая более структурированные, гибкие и эффективные поисковые операции.

Следующие ресурсы предоставляют более подробную информацию о ретриверах.

Попробуйте приведенный выше код самостоятельно!Вы можете запуститьприлагаемый блокнот Jupyter, импортируйте данные IMDB в проект Elastic Serverless Search!

Готовы попробовать сами?начинатьБесплатная пробная версия
Хотите получить сертификацию Elastic?Узнай в следующий разОбучение инженеров ElasticsearchКогда начать!

оригинал:Извлекатели Elasticsearch — Как использовать извлекатели поиска в Elasticsearch — Elastic Search Labs