기술나눔

Elasticsearch: 검색기 소개 - 모든 것을 검색

2024-07-12

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

작성자: Elastic에서제프 베스탈, 잭 콘라드슨

8.14에서 Elastic은 Elasticsearch에 "검색기"라는 새로운 검색 기능을 도입했습니다. 단순성과 효율성, 그리고 검색 작업을 어떻게 향상시킬 수 있는지 알아보려면 계속 읽어보세요.

리트리버는 Elasticsearch의 검색 API에 추가된 새로운 추상화 계층입니다. 단일 _search API 호출로 다단계 검색 파이프라인을 구성하는 기능을 제공합니다. 이 아키텍처는 복잡한 검색 쿼리에 대한 여러 Elasticsearch API 호출의 필요성을 제거하여 애플리케이션의 검색 논리를 단순화합니다. 또한 여러 쿼리의 결과를 결합해야 하는 클라이언트 측 논리의 필요성도 줄어듭니다.

검색기의 초기 유형

초기 릴리스에는 세 가지 유형의 리트리버가 포함되어 있습니다. 각 검색기는 특정 목적을 위해 설계되었으며 결합되면 복잡한 검색을 수행할 수 있습니다.

사용 가능한 유형은 다음과 같습니다.

  • 기준 - 기존 쿼리에서 최상위 문서를 반환합니다. 이러한 유형은 기존 쿼리 DSL 요청 구문을 지원하여 이전 버전과 호환되므로 원하는 속도로 크롤러 프레임워크로 마이그레이션할 수 있습니다.
  • 한국어: - kNN 검색에서 상위 문서를 반환합니다.
  • 라디오 - 상호 융합 알고리즘을 사용하여 사용자 조정이 없거나 최소한으로 조정하면서 여러 개의 1단계 검색기를 단일 결과 집합으로 결합하고 순위를 매깁니다. RRF 검색기는 필터 요소가 하위 검색기에 전파되는 복합 검색기입니다.

리트리버는 어떻게 다른가요? 왜 유용합니까?

기존 쿼리의 경우 쿼리는 전체 검색 API 호출의 일부입니다. 리트리버는 개별적으로 사용하거나 쉽게 결합할 수 있는 독립적인 개체로 설계되었다는 점에서 다릅니다. 이 모듈식 접근 방식은 검색 전략을 설계할 때 더 큰 유연성을 제공합니다.

리트리버는 순서와 논리를 명확히 하여 검색 작업을 정의하는 계층 구조인 "리트리버 트리"의 일부로 설계되었습니다. 이 구조를 사용하면 복잡한 검색을 더 쉽게 관리하고 개발자가 더 쉽게 이해할 수 있으며 향후에 새로운 기능을 쉽게 추가할 수 있습니다.

검색기는 구성성을 지원하므로 파이프라인을 구축하고 다양한 검색 전략을 통합할 수 있습니다. 이를 통해 다양한 검색 조합을 쉽게 테스트할 수 있습니다. 또한 문서의 점수를 매기고 필터링하는 방법을 더 효과적으로 제어할 수 있습니다. 예를 들어 최소 점수 임계값을 지정하고, 점수에 영향을 주지 않고 복잡한 필터를 적용하고, 성능 최적화를 위해 quit_after와 같은 매개변수를 사용할 수 있습니다.

레거시 쿼리 요소와의 이전 버전과의 호환성을 유지하여 해당 요소를 적절한 검색기로 자동 변환합니다.

검색 사용 예

리트리버를 사용하는 몇 가지 예를 살펴보겠습니다. 우리는 IMDB 샘플 데이터 세트를 사용합니다.

포함된 것을 실행할 수 있습니다. 주피터 노트북, IMDB 데이터를 서버리스 검색 프로젝트로 가져오고 다음 예제를 직접 실행해 보세요!

상위 수준 설정은 다음과 같습니다.

  • 개요 - 영화에 대한 간략한 요약
  • 이름 - 영화의 이름
  • overview_dense - e5-small 모델에서 생성된density_벡터
  • overview_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. }

rrf - 모든 것을 결합합니다!

  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 검색 기능과 사용자 친화성에 있어서 중요한 진전을 나타냅니다. 각 검색기는 논리를 적용하고 결과를 체인의 다음 항목에 전달하는 파이프라인 방식으로 연결될 수 있습니다. 검색자는 보다 체계적이고 유연하며 효율적인 검색 작업을 통해 검색 경험을 크게 향상시킬 수 있습니다.

다음 리소스는 검색기에 대한 자세한 내용을 제공합니다.

위의 코드를 직접 시도해 보세요!당신은 실행할 수 있습니다주피터 노트북과 함께 제공, IMDB 데이터를 Elastic Serverless Search 프로젝트로 가져오세요!

직접 시도해 볼 준비가 되셨나요?시작무료 시험판
Elastic 인증을 받고 싶으신가요?다음에 알아보세요Elasticsearch 엔지니어 교육언제 시작해야 할까요?

원래의:Elasticsearch 검색기 - Elasticsearch에서 검색 검색기를 사용하는 방법 — Elastic Search Labs