도입과 함께 벡터 검색이제 사용자는 다음을 저장할 수 있습니다. 대형 벡터 배열-문서 내에서 임의의 숫자로 구성된 경우가 많습니다. 이 데이터는 대부분의 표준 쿼리에는 필요하지 않으므로 이제 사용자들은 확장 속성 (XATTR)을 사용하여 문서 메타데이터의 일부인 벡터 및 기타 부피가 큰 콘텐츠를 저장합니다. 이렇게 하면 무거운 데이터를 기본 쿼리 경로에서 제외하여 성능이 향상됩니다. 이 게시물에서는 XATTR이 무엇인지 설명하고, 그 이점을 강조하며, 검색에서 어떻게 사용할 수 있는지 보여드립니다.
어디에 있습니까? XATTR?
XATTR은 사용자가 문서 콘텐츠를 변경하지 않고 수정하거나 변경할 수 있는 문서의 메타데이터입니다. 이를 통해 문서를 두 부분으로 분리할 수 있습니다. 문서가 필요한 서비스는 필요할 때만 XATTR 콘텐츠를 가져오는 키값 저장소(KV)에서 문서를 가져옵니다.
사용자가 문서 구조가 다음과 같은 호텔 데이터를 색인하려고 하는 경우를 예로 들어 보겠습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
{ "title": "길링햄(켄트)", "name": "메드웨이 유스 호스텔", "주소": "Capstone Road, ME7 3JE", "방향": null, "전화": "+44 870 770 5964", "무료": null, "이메일": null, "팩스": null, "url": "http://www.yha.org.uk", "체크인": null, "checkout": null, "가격": null, "geo": { "lat": 51.35785, "lon": 0.55818, "정확도": "범위_보간" }, "id": 10025, "country": "영국", "city": "Medway", "state": null,, "vacancy": true, "설명": "길링햄에서 약 3마일 떨어진 곳에 위치한 40개 침대 규모의 여름 호스텔로, 반 전원적인 분위기의 오스트 하우스를 개조한 곳에 자리하고 있습니다.", "설명_벡터": [0.9293051,...(108 더 보기 float32s)...,0.41247833], "pets_ok": true, "free_breakfast": true, "free_인터넷": false, "free_parking": true } |
이 문서 구조에는 호텔에 필요한 모든 필드와 비슷한 설명을 가진 호텔을 찾는 데 사용되는 벡터화된 설명이 포함되어 있습니다. 110차원 벡터인 설명 벡터(25번째 줄)는 약 1400바이트를 차지하며, 나머지 문서의 크기는 약 1400바이트입니다.
일반적인 사용 사례에서 사용자가 커버링 인덱스 없이 SQL++를 사용하여 벡터가 아닌 쿼리를 실행하면 전체 문서가 가져옵니다. 즉, 문서 크기의 절반에 가까운 벡터가 필요하지 않음에도 불구하고 나머지 문서와 함께 검색되어 결국 리소스를 낭비하게 됩니다.
사용자가 XATTR을 사용하지 않고 문서 콘텐츠 내의 데이터는 모두 가지고 있지만 XATTR에는 데이터가 없는 상황을 상상해 봅시다. 문서를 가져오려는 쿼리 및 검색과 같은 모든 서비스는 원하는 것을 얻기 위해 모든 문서 콘텐츠를 처리해야 합니다.
이 문서를 구조화하는 더 좋은 방법은 벡터를 XATTR의 일부로 저장하는 것입니다. 이렇게 하면 벡터가 아닌 데이터를 찾는 서비스는 XATTR이 아닌 문서 콘텐츠만 살펴볼 수 있으므로 전송되는 데이터의 양이 절반으로 줄어듭니다.
사용자는 지리 정보, 연락처 정보 등과 같이 거의 사용되지 않는 다른 필드도 XATTR에 추가하여 이를 극한까지 끌어올릴 수 있습니다. 이렇게 하면 불필요하게 전송되는 데이터의 양을 더욱 줄일 수 있습니다.
카우치베이스 색인 생성 방법 XATTR
Couchbase Server 7.6.2 이상부터는 검색 서비스 는 인덱스 생성 과정에서 인덱스 매핑에 필요한 경우에만 XATTR에 존재하는 데이터를 수집할 수 있는 기능을 사용자에게 제공합니다. XATTRs 데이터가 관련성이 없고 인덱스 정의에 XATTRs 매핑이 존재하지 않는 경우, 사용자는 데이터 서비스에서 더 가벼운 페이로드를 가져오기 때문에 더 빠른 데이터 수집과 인덱싱 속도를 기대할 수 있습니다.
사용자가 XATTR 콘텐츠를 색인하는 인덱스를 생성했다고 가정해 보겠습니다. 인덱스 정의는 다음과 같을 것이며, 10-27번째 줄에 XATTR이 색인되어 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
{ "name": "예제-인덱스", "type": "전체 텍스트 인덱스", "params": { "매핑": { "default_mapping": { "enabled": true, "동적": true, "속성": { "_$xattrs": { "enabled": true, "동적": true, "속성": { "textField": { "enabled": true, "동적": false, "fields": [ { "name": "textField", "type": "text", "store": false, "index": true, "include_term_vectors": false, "IN_IN_ALL": false, "docvalues": false } ] } } } } }, "default_type": "_default", "기본_분석기": "표준", "기본_날짜_파서": "날짜/시간 옵션", "default_field": "_all", "store_dynamic": false, "index_dynamic": true, "docvalues_dynamic": false }, "store": { "indexType": "scorch", "kvStoreName": "" }, "doc_config": { "모드": "type_field", "type_field": "type", "docid_prefix_delim": "", "docid_regexp": "" } }, "sourceType": "couchbase", "sourceName": "sample-bucket", "sourceUUID": "602c579bc2a74e67dc1f051eb769e702", "sourceParams": {}, "planParams": { "최대 파티션당 인덱스": 1024, "numReplicas": 0, "indexPartitions": 1 }, "uuid": "" } |
위와 같은 인덱스 정의를 사용하여 인덱스를 생성한 후, 검색은 데이터 서비스에서 모든 문서 콘텐츠와 XATTR 콘텐츠를 가져옵니다.
이 경우 콘텐츠를 가져온 후 검색 서비스는 이 두 가지를 하나의 문서로 결합합니다. XATTR 내에 있는 데이터는 다음과 같은 특수 필드 매핑을 통해 문서 콘텐츠에 매핑됩니다. _$xattrs
색인화 프로세스 중입니다.
XATTR 콘텐츠에 있는 필드를 쿼리하려면 이 콘텐츠가 다음과 같은 특수 필드 아래에 배치된다는 점에 유의해야 합니다. _$xattrs
를 사용해야 하며 쿼리에 이를 반영해야 합니다. 또한 XATTRs 필드 이름의 크기에는 12자라는 본질적인 제한이 있습니다.
다음은 다음을 사용하여 샘플 문서에 대한 쿼리를 작성할 때의 모습입니다. XATTR:
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "설명": true, "fields": [ "*" ], "하이라이트": {}, "query": { "query": "_$xattrs.textField:*" }, "size": 10, "from": 0 } |
XATTR은 벡터 저장에만 국한되지 않습니다. 자주 사용되지 않는 필드, 검색 서비스에만 해당하는 필드 또는 대용량 필드가 있는 경우 XATTR에 추가하는 것이 좋습니다. 이렇게 하면 이러한 필드가 필요하지 않은 서비스는 KV에서 더 적은 데이터를 가져올 필요가 있습니다.
다음 단계
-
- 자세히 알아보기 벡터 검색 개념 블로그에서 튜토리얼과 개념 등 다양한 정보를 확인할 수 있습니다.
- 사용 방법에 대해 자세히 알아보기 XATTR SDK를 통해 문서에서 확인할 수 있습니다.
- 카우치베이스 카펠라 무료 체험판 에는 벡터 검색을 비롯한 다양한 기능이 포함되어 있습니다. 지금 바로 사용해 보세요.
놀라운 블로그... 기존 데이터베이스 콘텐츠를 벡터화하면 기존 애플리케이션의 검색 성능에 부정적인 영향을 미치는지 궁금합니다.
멋진 도표 설명!
감사합니다, Likith B.