Elasticsearch는 vector 및 lexical 검색을 모두 수행할 수 있는 분산형 RESTful 검색 및 분석 엔진입니다. Apache Lucene 라이브러리를 기반으로 구축되었습니다.이 노트북은
Elasticsearch vector store와 관련된 기능을 사용하는 방법을 보여줍니다.
Setup
Elasticsearch vector 검색을 사용하려면 langchain-elasticsearch 패키지를 설치해야 합니다.
Credentials
Elasticsearch 인스턴스를 설정하는 두 가지 주요 방법이 있습니다:- Elastic Cloud: Elastic Cloud는 관리형 Elasticsearch 서비스입니다. 무료 평가판에 가입하세요.
- Local Install Elasticsearch: Elasticsearch를 로컬에서 실행하여 시작하세요. 가장 쉬운 방법은 공식 Elasticsearch Docker 이미지를 사용하는 것입니다. 자세한 내용은 Elasticsearch Docker 문서를 참조하세요.
Running Elasticsearch via Docker
예제: 보안이 비활성화된 단일 노드 Elasticsearch 인스턴스를 실행합니다. 프로덕션 환경에서는 권장되지 않습니다.Running with Authentication
프로덕션 환경에서는 보안을 활성화하여 실행하는 것을 권장합니다. 로그인 자격 증명으로 연결하려면es_api_key 또는 es_user와 es_password 매개변수를 사용할 수 있습니다.
기본 “elastic” 사용자의 비밀번호를 얻는 방법은?
기본 “elastic” 사용자의 Elastic Cloud 비밀번호를 얻으려면:- cloud.elastic.co에서 Elastic Cloud 콘솔에 로그인합니다
- “Security” > “Users”로 이동합니다
- “elastic” 사용자를 찾아 “Edit”을 클릭합니다
- “Reset password”를 클릭합니다
- 프롬프트에 따라 비밀번호를 재설정합니다
API key를 얻는 방법은?
API key를 얻으려면:- cloud.elastic.co에서 Elastic Cloud 콘솔에 로그인합니다
- Kibana를 열고 Stack Management > API Keys로 이동합니다
- “Create API key”를 클릭합니다
- API key의 이름을 입력하고 “Create”을 클릭합니다
- API key를 복사하여
api_key매개변수에 붙여넣습니다
Elastic Cloud
Elastic Cloud의 Elasticsearch 인스턴스에 연결하려면es_cloud_id 매개변수 또는 es_url을 사용할 수 있습니다.
Initialization
Elasticsearch는 docker를 사용하여 localhost:9200에서 로컬로 실행됩니다. Elastic Cloud에서 Elasticsearch에 연결하는 방법에 대한 자세한 내용은 위의 인증을 사용한 연결을 참조하세요.Manage vector store
Add items to vector store
Delete items from vector store
Query vector store
vector store가 생성되고 관련 문서가 추가되면 chain 또는 agent를 실행하는 동안 쿼리하고 싶을 것입니다. 이 예제들은 검색 시 필터링을 사용하는 방법도 보여줍니다.Query directly
Similarity search
metadata에 대한 필터링과 함께 간단한 유사도 검색을 수행하는 방법은 다음과 같습니다:Similarity search with score
유사도 검색을 실행하고 해당 점수를 받으려면 다음을 실행할 수 있습니다:Query by turning into retriever
vector store를 retriever로 변환하여 chain에서 더 쉽게 사용할 수도 있습니다.Distance Similarity Algorithm
Elasticsearch는 다음과 같은 vector 거리 유사도 알고리즘을 지원합니다:- cosine
- euclidean
- dot_product
Retrieval Strategies
Elasticsearch는 다양한 검색 전략을 지원하는 능력으로 인해 다른 vector 전용 데이터베이스에 비해 큰 장점을 가지고 있습니다. 이 노트북에서는 가장 일반적인 검색 전략 중 일부를 지원하도록ElasticsearchStore를 구성합니다.
기본적으로 ElasticsearchStore는 DenseVectorStrategy를 사용합니다(버전 0.2.0 이전에는 ApproxRetrievalStrategy라고 불렸습니다).
DenseVectorStrategy
이것은 쿼리 vector와 가장 유사한 상위 k개의 vector를 반환합니다.k 매개변수는 ElasticsearchStore가 초기화될 때 설정됩니다. 기본값은 10입니다.
예제: dense vector와 keyword 검색을 사용한 하이브리드 검색
이 예제는 근사 의미 검색과 키워드 기반 검색의 조합을 사용하여 하이브리드 검색을 수행하도록 ElasticsearchStore를 구성하는 방법을 보여줍니다. 우리는 RRF를 사용하여 서로 다른 검색 방법의 두 점수를 균형있게 조정합니다. 하이브리드 검색을 활성화하려면DenseVectorStrategy 생성자에서 hybrid=True를 설정해야 합니다.
예제: Elasticsearch의 Embedding Model을 사용한 dense vector 검색
이 예제는 dense vector 검색을 위해 Elasticsearch에 배포된 embedding 모델을 사용하도록ElasticsearchStore를 구성하는 방법을 보여줍니다.
이를 사용하려면 DenseVectorStrategy 생성자에서 query_model_id 인수를 통해 model_id를 지정하세요.
참고: 이를 위해서는 모델이 Elasticsearch ML 노드에 배포되어 실행 중이어야 합니다. eland로 모델을 배포하는 방법에 대한 노트북 예제를 참조하세요.
SparseVectorStrategy (ELSER)
이 전략은 Elasticsearch의 sparse vector 검색을 사용하여 상위 k개의 결과를 검색합니다. 현재는 자체 “ELSER” embedding 모델만 지원합니다. 참고: 이를 위해서는 ELSER 모델이 Elasticsearch ml 노드에 배포되어 실행 중이어야 합니다. 이를 사용하려면ElasticsearchStore 생성자에서 SparseVectorStrategy를 지정하세요(버전 0.2.0 이전에는 SparseVectorRetrievalStrategy라고 불렸습니다). model ID를 제공해야 합니다.
DenseVectorScriptScoreStrategy
이 전략은 Elasticsearch의 script score 쿼리를 사용하여 정확한 vector 검색(brute force라고도 함)을 수행하여 상위 k개의 결과를 검색합니다. (이 전략은 버전 0.2.0 이전에는ExactRetrievalStrategy라고 불렸습니다.)
이를 사용하려면 ElasticsearchStore 생성자에서 DenseVectorScriptScoreStrategy를 지정하세요.
BM25Strategy
마지막으로 전체 텍스트 키워드 검색을 사용할 수 있습니다. 이를 사용하려면ElasticsearchStore 생성자에서 BM25Strategy를 지정하세요.
BM25RetrievalStrategy
이 전략을 사용하면 사용자가 vector 검색 없이 순수 BM25를 사용하여 검색을 수행할 수 있습니다. 이를 사용하려면ElasticsearchStore 생성자에서 BM25RetrievalStrategy를 지정하세요.
아래 예제에서 embedding 옵션이 지정되지 않았으며, 이는 embedding을 사용하지 않고 검색이 수행됨을 나타냅니다.
Customise the Query
검색 시custom_query 매개변수를 사용하면 Elasticsearch에서 문서를 검색하는 데 사용되는 쿼리를 조정할 수 있습니다. 이는 field의 선형 부스팅을 지원하기 위해 더 복잡한 쿼리를 사용하려는 경우 유용합니다.
Customize the Document Builder
검색 시doc_builder 매개변수를 사용하면 Elasticsearch에서 검색된 데이터를 사용하여 Document가 구축되는 방식을 조정할 수 있습니다. 이는 LangChain을 사용하여 생성되지 않은 index가 있는 경우 특히 유용합니다.
Usage for retrieval-augmented generation
retrieval-augmented generation(RAG)에 이 vector store를 사용하는 방법에 대한 가이드는 다음 섹션을 참조하세요:FAQ
질문: Elasticsearch에 문서를 인덱싱할 때 timeout 오류가 발생합니다. 어떻게 해결하나요?
한 가지 가능한 문제는 문서가 Elasticsearch에 인덱싱되는 데 시간이 더 오래 걸릴 수 있다는 것입니다. ElasticsearchStore는 Elasticsearch bulk API를 사용하며, timeout 오류의 가능성을 줄이기 위해 조정할 수 있는 몇 가지 기본값이 있습니다. 이는 SparseVectorRetrievalStrategy를 사용할 때도 좋은 방법입니다. 기본값은 다음과 같습니다:chunk_size: 500max_chunk_bytes: 100MB
add_texts 메서드에 chunk_size 및 max_chunk_bytes 매개변수를 전달할 수 있습니다.
Upgrading to ElasticsearchStore
langchain 기반 프로젝트에서 이미 Elasticsearch를 사용하고 있다면 현재 deprecated된 이전 구현인ElasticVectorSearch 및 ElasticKNNSearch를 사용하고 있을 수 있습니다. 우리는 더 유연하고 사용하기 쉬운 ElasticsearchStore라는 새로운 구현을 도입했습니다. 이 노트북은 새로운 구현으로 업그레이드하는 과정을 안내합니다.
새로운 기능은 무엇인가요?
새로운 구현은 이제ElasticsearchStore라는 하나의 클래스로, 전략을 통해 근사 dense vector, 정확한 dense vector, sparse vector(ELSER), BM25 검색 및 하이브리드 검색에 사용할 수 있습니다.
ElasticKNNSearch를 사용하고 있습니다
이전 구현:ElasticVectorSearch를 사용하고 있습니다
이전 구현:API reference
모든ElasticSearchStore 기능 및 구성에 대한 자세한 문서는 API reference를 참조하세요: python.langchain.com/api_reference/elasticsearch/vectorstores/langchain_elasticsearch.vectorstores.ElasticsearchStore.html
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.