DocumentWriter
DocumentWriter
선택한 Document Store에 문서를 쓸 때 사용하는 컴포넌트예요.
출처: 문서
본문
- 파이프라인에서의 일반적인 위치: 인덱싱 파이프라인의 마지막 컴포넌트로 사용해요.
- 필수 초기화 변수:
document_store(Document Store 인스턴스) - 필수 실행 변수:
documents(문서 리스트) - 출력 변수:
documents_written(쓰여진 문서 수, 정수)
개요 (Overview)
DocumentWriter는 선택한 Document Store에 문서 리스트를 써요. 보통 인덱싱 파이프라인에서 문서를 전처리하고 임베딩을 만든 뒤의 마지막 단계로 사용해요.
특정 파일 형식과 함께 이 컴포넌트를 쓰려면 그 앞에 올바른 Converter를 배치해야 해요. 예를 들어 DocumentWriter를 Markdown 파일과 함께 쓰려면 인덱싱 파이프라인에서 DocumentWriter 앞에 MarkdownToDocument 컴포넌트를 두세요.
DuplicatePolicy
DuplicatePolicy는 DocumentStore에서 같은 ID를 가진 문서를 어떻게 처리할지 정하는 옵션들을 정의한 클래스예요. 네 가지 값이 있어요.
- NONE: Document Store 설정에 의존하는 기본 정책이에요.
- OVERWRITE: 같은 ID의 문서가 이미
DocumentStore에 있으면 새 문서로 덮어쓴다는 뜻이에요. - SKIP: 같은 ID의 문서가 이미 있으면 새 문서를 건너뛰고
DocumentStore에 추가하지 않아요. - FAIL: 같은 ID의 문서가 이미
DocumentStore에 있으면 오류를 발생시켜요. 중복 문서가 추가되는 것을 막아주죠.
단독 사용 (On its own)
두 문서를 InMemoryDocumentStore에 쓰는 예시예요.
from haystack import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
documents = [
Document(content="This is document 1"),
Document(content="This is document 2"),
]
document_store = InMemoryDocumentStore()
document_writer = DocumentWriter(document_store=document_store)
document_writer.run(documents=documents)
파이프라인에서 사용 (In a pipeline)
먼저 SentenceTransformersDocumentEmbedder로 문서의 임베딩을 만들고, 그다음 DocumentWriter로 문서를 InMemoryDocumentStore에 쓰는 인덱싱 파이프라인 예시예요.
이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요.
pip install sentence-transformers-haystack
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersDocumentEmbedder,
)
from haystack.components.writers import DocumentWriter
documents = [
Document(content="This is document 1"),
Document(content="This is document 2"),
]
document_store = InMemoryDocumentStore()
embedder = SentenceTransformersDocumentEmbedder()
document_writer = DocumentWriter(
document_store=document_store,
policy=DuplicatePolicy.NONE,
)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component(instance=embedder, name="embedder")
indexing_pipeline.add_component(instance=document_writer, name="writer")
indexing_pipeline.connect("embedder", "writer")
indexing_pipeline.run({"embedder": {"documents": documents}})