Partage de technologie

Elasticsearch : Présentation des récupérateurs - Tout rechercher

2024-07-12

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

Auteur : d'ElasticJeff Vestal, Jack Conradson

Dans la version 8.14, Elastic a introduit une nouvelle fonctionnalité de recherche appelée « récupérateurs » dans Elasticsearch. Poursuivez votre lecture pour en savoir plus sur leur simplicité et leur efficacité, ainsi que sur la manière dont ils peuvent améliorer vos opérations de recherche.

Les récupérateurs sont une nouvelle couche d'abstraction ajoutée à l'API de recherche dans Elasticsearch. Ils offrent la possibilité de configurer des pipelines de récupération en plusieurs étapes dans un seul appel d'API _search. Cette architecture simplifie la logique de recherche dans votre application en éliminant le besoin de plusieurs appels d'API Elasticsearch pour les requêtes de recherche complexes. Cela réduit également le besoin de logique côté client, qui nécessite souvent de combiner les résultats de plusieurs requêtes.

Le type initial du récupérateur

Trois types de récupérateurs sont inclus dans la version initiale. Chaque récupérateur est conçu dans un but spécifique et, lorsqu'ils sont combinés, ils peuvent effectuer des recherches complexes.

Les types disponibles incluent :

  • standard - Renvoie les documents de niveau supérieur dans les requêtes traditionnelles. Ces types sont rétrocompatibles en prenant en charge la syntaxe de requête DSL de requête existante, vous permettant de migrer vers la structure du robot d'exploration à votre propre rythme.
  • kNN - Renvoie les meilleurs documents dans la recherche kNN.
  • RRF - Utilisez l'algorithme de fusion réciproque pour combiner et classer plusieurs récupérateurs de première étape en un seul ensemble de résultats sans aucun ajustement utilisateur ou un minimum. Un récupérateur RRF est un récupérateur composé dont les éléments de filtre sont propagés à ses récupérateurs enfants.

En quoi les récupérateurs sont-ils différents ? Pourquoi sont-ils utiles ?

Pour les requêtes traditionnelles, la requête fait partie d’un appel d’API de recherche global. Les récupérateurs diffèrent en ce sens qu'ils sont conçus comme des entités indépendantes qui peuvent être utilisées individuellement ou facilement combinées. Cette approche modulaire offre une plus grande flexibilité lors de la conception de stratégies de recherche.

Les récupérateurs sont conçus dans le cadre d'un « arbre de récupération », une structure hiérarchique qui définit les opérations de recherche en clarifiant leur ordre et leur logique. Cette structure rend les recherches complexes plus faciles à gérer, plus faciles à comprendre pour les développeurs et permet d'ajouter facilement de nouvelles fonctionnalités à l'avenir.

Les récupérateurs prennent en charge la composabilité, vous permettant de créer des pipelines et d'intégrer différentes stratégies de récupération. Cela permet de tester facilement différentes combinaisons de récupération. Ils offrent également plus de contrôle sur la manière dont les documents sont notés et filtrés. Par exemple, vous pouvez spécifier un seuil de score minimum, appliquer des filtres complexes sans affecter le score et utiliser des paramètres tels que terminate_after pour optimiser les performances.

Maintient la compatibilité descendante avec les éléments de requête existants, en les convertissant automatiquement en récupérateurs appropriés.

Exemple d'utilisation de la récupération

Examinons quelques exemples d'utilisation de récupérateurs. Nous utilisons l'exemple d'ensemble de données IMDB.

Vous pouvez exécuter le inclus cahier jupyter, importez les données IMDB dans votre projet de recherche sans serveur et exécutez vous-même les exemples suivants !

Les paramètres de haut niveau sont :

  • aperçu - un bref résumé du film
  • noms - les noms des films
  • review_dense - dense_vector généré à partir du modèle e5-small
  • review_sparse - Vecteurs clairsemés utilisant le modèle ELSER d'Elastic.
  • Utiliser uniquement les champs et définir _source:false renvoie la version texte des noms et un aperçu

Standard – Recherchez dans tout le texte !

  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 - Recherchez tous les vecteurs denses !

  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 - Recherchez tous les vecteurs clairsemés !

  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. }

rrf - combine tout !

  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. }

La limite actuelle du retriever

Le retriever présente certaines limitations dont les utilisateurs doivent être conscients. Par exemple, l’utilisation d’un outil de récupération composé permet d’interroger uniquement les éléments. Cela impose une séparation plus claire des préoccupations et évite la complexité liée à une imbrication excessive ou à une configuration indépendante. De plus, les récupérateurs enfants ne doivent pas utiliser d'éléments qui limitent un récupérateur composite à faire partie d'une arborescence de récupérateurs.

Ces restrictions améliorent les performances et la composabilité même lors de l'utilisation de stratégies de récupération complexes.

Le récupérateur est initialement publié en tant qu'aperçu technologique, son API est donc susceptible d'être modifiée.

en conclusion

Les chercheurs représentent une avancée importante dans la fonctionnalité de recherche et la convivialité d’Elasticsearch. Ils peuvent être enchaînés de manière pipeline, chaque récupérateur appliquant sa logique et transmettant les résultats à l'élément suivant de la chaîne. Les récupérateurs peuvent améliorer considérablement l'expérience de recherche en permettant des opérations de recherche plus structurées, flexibles et efficaces.

Les ressources suivantes fournissent plus de détails sur les récupérateurs.

Essayez vous-même le code ci-dessus !Tu peux courircahier jupyter qui accompagne, importez les données IMDB dans le projet Elastic Serverless Search !

Prêt à l'essayer vous-même ?commencerEssai gratuit
Vous souhaitez obtenir la certification Elastic ?A découvrir la prochaine foisFormation d'ingénieur ElasticsearchQuand commencer !

original:Extracteurs Elasticsearch - Comment utiliser les extracteurs de recherche dans Elasticsearch — Elastic Search Labs