Compartilhamento de tecnologia

Elasticsearch: Apresentando recuperadores – Pesquisando tudo

2024-07-12

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

Autor: da ElasticJeff Vestal, Jack Conradson

Na versão 8.14, a Elastic introduziu um novo recurso de pesquisa chamado “retrievers” no Elasticsearch. Continue lendo para aprender sobre sua simplicidade e eficiência e como eles podem aprimorar suas operações de pesquisa.

Retrievers são uma nova camada de abstração adicionada à API de pesquisa no Elasticsearch. Eles fornecem a facilidade de configurar pipelines de recuperação de vários estágios em uma única chamada de API _search. Essa arquitetura simplifica a lógica de pesquisa em seu aplicativo, eliminando a necessidade de diversas chamadas de API do Elasticsearch para consultas de pesquisa complexas. Também reduz a necessidade de lógica do lado do cliente, que muitas vezes requer a combinação de resultados de múltiplas consultas.

O tipo inicial do recuperador

Três tipos de recuperadores estão incluídos na versão inicial. Cada recuperador é projetado para uma finalidade específica e, quando combinados, podem realizar pesquisas complexas.

Os tipos disponíveis incluem:

  • padrão - Retorna documentos de nível superior em consultas tradicionais. Esses tipos são compatíveis com versões anteriores, pois oferecem suporte à sintaxe de solicitação DSL de consulta existente, permitindo que você migre para a estrutura do rastreador em seu próprio ritmo.
  • kNN - Retorna os principais documentos na pesquisa kNN.
  • RRF - Use o algoritmo de fusão recíproca para combinar e classificar vários recuperadores de primeiro estágio em um único conjunto de resultados com nenhum ou mínimo ajuste do usuário. Um recuperador RRF é um recuperador composto cujos elementos de filtro são propagados para seus recuperadores filhos.

Como os recuperadores são diferentes? Por que eles são úteis?

Para consultas tradicionais, a consulta faz parte de uma chamada geral da API de pesquisa. Os recuperadores diferem porque são projetados como entidades independentes que podem ser usadas individualmente ou facilmente combinadas. Esta abordagem modular proporciona maior flexibilidade ao projetar estratégias de busca.

Os recuperadores são projetados como parte de uma "árvore de recuperação", uma estrutura hierárquica que define as operações de pesquisa, esclarecendo sua ordem e lógica. Essa estrutura torna pesquisas complexas mais gerenciáveis, mais fáceis de entender para os desenvolvedores e permite que novos recursos sejam facilmente adicionados no futuro.

Os recuperadores oferecem suporte à composição, permitindo construir pipelines e integrar diferentes estratégias de recuperação. Isso permite testar facilmente diferentes combinações de recuperação. Eles também fornecem mais controle sobre como os documentos são pontuados e filtrados. Por exemplo, você pode especificar um limite mínimo de pontuação, aplicar filtros complexos sem afetar a pontuação e usar parâmetros como termina_after para otimização de desempenho.

Mantém a compatibilidade retroativa com elementos de consulta legados, convertendo-os automaticamente em recuperadores apropriados.

Exemplo de uso de recuperação

Vejamos alguns exemplos de uso de recuperadores. Usamos o conjunto de dados de amostra do IMDB.

Você pode executar o incluído caderno jupyter, importe dados do IMDB para seu projeto de pesquisa sem servidor e execute você mesmo os exemplos a seguir!

As configurações de alto nível são:

  • visão geral - um breve resumo do filme
  • nomes - os nomes dos filmes
  • Overview_dense - denso_vector gerado a partir do modelo e5-small
  • Overview_sparse - Vetores esparsos usando o modelo ELSER da Elastic.
  • Usar apenas campos e definir _source:false retorna a versão em texto dos nomes e visão geral

Padrão - Pesquise todo o texto!

  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 - Pesquise todos os vetores densos!

  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 - Pesquise todos os vetores esparsos!

  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 - combina tudo!

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

O limite atual do recuperador

O recuperador vem com certas limitações das quais os usuários devem estar cientes. Por exemplo, usar um recuperador composto permite que apenas elementos sejam consultados. Isso força uma separação mais clara de interesses e evita a complexidade que acompanha o aninhamento excessivo ou a configuração independente. Além disso, os recuperadores filhos não devem usar elementos que restrinjam um recuperador composto a fazer parte de uma árvore de recuperação.

Essas restrições melhoram o desempenho e a capacidade de composição mesmo ao usar estratégias de recuperação complexas.

O recuperador é inicialmente lançado como uma prévia da tecnologia, portanto sua API está sujeita a alterações

para concluir

Os pesquisadores representam um avanço importante na funcionalidade de pesquisa e na facilidade de uso do Elasticsearch. Eles podem ser encadeados em pipeline, com cada recuperador aplicando sua lógica e passando os resultados para o próximo item da cadeia. Os recuperadores podem melhorar significativamente a experiência de pesquisa, permitindo operações de pesquisa mais estruturadas, flexíveis e eficientes.

Os recursos a seguir fornecem mais detalhes sobre recuperadores.

Experimente você mesmo o código acima!Você pode correracompanhando notebook jupyter, importe dados do IMDB para o projeto Elastic Serverless Search!

Pronto para experimentar você mesmo?começarTeste grátis
Quer obter a certificação Elastic?Descubra na próxima vezTreinamento de engenheiro ElasticsearchQuando começar!

original:Recuperadores Elasticsearch - Como usar recuperadores de pesquisa no Elasticsearch — Elastic Search Labs