인덱스는 기본 전체 텍스트 검색을 가능하게 하는 인프라를 제공합니다.
Couchbase Server 7.0의 새로운 범위 및 컬렉션 기능으로 애플리케이션의 전체 텍스트 검색이 그 어느 때보다 강력해졌습니다. 이러한 검색을 강화하려면 전체 텍스트 인덱스가 필요합니다.
이 문서에서는 다음에서 범위 및 컬렉션에 대한 개요를 제공합니다. 카우치베이스 를 살펴보고 새로운 Couchbase 퀵 에디터를 통해 전체 텍스트 색인을 만드는 방법을 안내합니다. 또한 범위 및 컬렉션을 수용하기 위한 표준 편집기의 변경 사항도 살펴봅니다.
전체 텍스트 검색이란 무엇인가요?
전체 텍스트 검색(FTS)은 문서 또는 문서 모음 내에서 텍스트를 검색하는 기술을 말합니다. Couchbase는 다양한 언어의 텍스트 색인 및 검색을 지원하며 다음을 제공합니다. 사용자 지정 가능한 텍스트 분석기 를 사용하여 토큰화기, 필터 등을 통해 다양한 방식으로 텍스트를 해석할 수 있습니다.
카우치베이스 버킷 내의 컬렉션 패러다임은 사용자가 여러 범위와 컬렉션을 구독할 수 있는 인덱스를 정의할 수 있게 해줍니다. 그렇다면 범위와 컬렉션이란 정확히 무엇일까요?
범위 및 컬렉션이란 무엇인가요?
문서 기반의 파티션화된 분산형 데이터베이스인 Couchbase 버킷은 카우치베이스 서버. 와 7.0 릴리스에서 버킷을 구성하여 조직 계층 구조를 형성하여 문서를 분류할 수 있습니다. 각 카테고리는 하위 버킷(또한 파티션된) 안에 보관되며, 해당 하위 버킷은 컬렉션. 이제 각 버킷은 아래 이미지에서 볼 수 있듯이 3계층 계층 구조를 통해 관리됩니다.
다음은 레스토랑 메뉴에 대해 범위 및 컬렉션을 사용하여 분류한 샘플 버킷입니다. (범위와 컬렉션의 관계에 대한 자세한 내용은 다음 문서를 참조하세요. 범위 및 컬렉션 이해에 대한 입문서.)
이 버킷 계층 구조의 경우 다음과 같은 데이터를 구독하고 색인할 전체 텍스트 검색 인덱스를 정의할 수 있습니다:
-
- 모든 채식주의자 타코의 내용물은 음식 메뉴의 범위
- 모든 버거에 사용되는 육류는 음식 메뉴의 범위
- 칵테일과 커피 음료의 종류는 다음과 같습니다. 음료 메뉴의 범위
이해가 되시겠죠?
참고: 전체 텍스트 인덱스를 정의하여 여러 컬렉션을 구독할 수 있지만 이러한 컬렉션은 모두 단일 범위에 속해야 합니다. 인덱스 정의는 범위를 초월할 수 없습니다.
색인 정의에 대해 알아보기
아래 스크린샷은 표준 Couchbase 편집기에서 인덱스를 추가하는 방법을 보여줍니다(Couchbase Server 6.6의 모습 그대로).
위의 스크린샷에서는 버킷의 JSON 문서에 있는 모든 콘텐츠를 색인하려고 합니다. 맥주 샘플
필드가 있는 유형
의 값은 맥주
. 화면 오른쪽의 색인 정의 미리 보기에는 색인에 대한 모든 설정이 표시됩니다. 맥주
. 이 미리보기는 설정이 변경되면 즉시 적용됩니다.
보시다시피 인덱스 정의에는 많은 설정이 있습니다. 그리고 카우치베이스 서버 7.0 에는 컬렉션을 지원하기 위한 더 많은 변형이 포함되어 있어 특히 신규 사용자에게는 어려울 수 있습니다.
그래서 색인 정의를 위한 퀵 에디터를 도입했습니다. 이를 통해 신규 사용자(또는 전체 텍스트 검색 인덱스의 고급 설정에 대해 자세히 알아보고 싶지 않은 사용자)는 누구나 Couchbase의 검색 서비스를 시작할 수 있습니다. 퀵 에디터를 자세히 살펴보기 전에 7.0에서 컬렉션을 수용하기 위해 전체 텍스트 인덱스의 정의가 어떻게 업데이트되었는지 살펴보겠습니다. 자유롭게 퀵 에디터에 대한 토론으로 바로 이동 를 클릭하세요.
카우치베이스 서버 7.0에서 전체 텍스트 인덱스 정의를 업데이트하는 방법
범위 및 컬렉션을 수용하기 위해 Couchbase 7.0에서 전체 텍스트 인덱스 정의에 대한 업데이트를 간단히 살펴보겠습니다. Couchbase는 레거시 버전의 Couchbase Server에서 이전 인덱스 정의를 계속 지원한다는 점에 유의하세요.
앞서 사용한 예시를 계속 이어가겠습니다. 맥주
인덱스의 Couchbase 버킷 맥주 샘플
. 기본 설정을 제거하고 관련 설정만 유지하면서 최소한의 인덱스 정의는 다음과 같습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "type": "전체 텍스트 인덱스", "name": "맥주", "sourceType": "couchbase", "sourceName": "맥주 샘플", "params": { "doc_config": { "모드": "type_field", "type_field": "type" }, "매핑": { "types": { "맥주": { "동적": true, "enabled": true } } }, "store": { "indexType": "scorch" } } } |
7.0에서는 버킷에 있는 모든 콘텐츠는 다음과 같습니다. 맥주 샘플
는 _기본값
수집 _기본값
범위 - 즉, Couchbase를 7.0으로 업그레이드하면 버킷의 데이터가 _기본값
컬렉션 내 _기본값
범위.
위의 인덱스 정의는 7.0에서 작동합니다. 하지만 위와 똑같은 작업을 수행하는 7.0 인덱스 정의가 대안이 될 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "type": "전체 텍스트 인덱스", "name": "맥주", "sourceType": "gocbcore", "sourceName": "맥주 샘플", "params": { "doc_config": { "모드": "scope.collection.type_field", "type_field": "type" }, "매핑": { "types": { "_기본값._기본값.맥주": { "동적": true, "enabled": true } } }, "store": { "indexType": "scorch" } } } |
위의 두 정의의 세 가지 차이점에 유의하세요:
-
sourceType
에서 변경되었습니다. 카우치베이스 에 gocbcore. 전체 텍스트 인덱스가 Couchbase 버킷과 통신하는 데 사용하는 기본 SDK를 더 잘 지원되는 최신 버전으로 변경했습니다.params.doc_config.mode
에서 변경되었습니다.type_field
에scope.collection.type_field
로 변경되어 이제 유형 매핑 이름이 해당 형식을 따르게 됩니다.- 그리고 유형 매핑 이름 이제
기본값._기본값.맥주
의 문서를 색인화한다는 것을 나타냅니다.유형
:맥주
내에서_기본값
컬렉션의_기본값
버킷의 범위맥주 샘플
.
데이터 모델링을 개선하는 데 도움이 되는 컬렉션
데이터를 단일 컬렉션으로 모델링(7.0 이전 동작 모방)한다는 것은 버킷 내의 모든 데이터가 전송되고 인덱스가 정의에 따라 문서를 필터링해야 한다는 의미입니다.
범위 및 컬렉션을 사용하면 데이터를 카테고리로 모델링할 수 있으며, 각 카테고리는 별도의 컬렉션에 존재합니다. 다음 예제에서 이 접근 방식의 한 가지 분명한 이점을 강조하겠습니다.
그리고 맥주 샘플
버킷에는 다음과 같은 유형의 문서가 저장됩니다. 맥주
그리고 양조장
모두 _기본값
수집 _기본값
범위. 이 모델을 변경해 보겠습니다:
- 범위 설정
콘텐츠
내맥주 샘플
. - 범위 내에서 두 개의 컬렉션을 설정합니다:
맥주
그리고양조장
. - 다음 데이터를 로드합니다.
유형
:맥주
에맥주
및유형
:양조장
에양조장
.
다음은 이전과 동일한 데이터를 보유하기 위한 인덱스 정의입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "type": "전체 텍스트 인덱스", "name": "맥주", "sourceType": "gocbcore", "sourceName": "맥주 샘플", "params": { "doc_config": { "모드": "scope.collection.type_field", "type_field": "type" }, "매핑": { "types": { "content.beers": { "동적": true, "enabled": true } } }, "store": { "indexType": "scorch" } } } |
이번 버킷은 다음과 같은 문서만 전송합니다. 유형
:맥주
. 따라서 최신 인덱스 정의를 사용하면 검색 노드가 됩니다:
-
- 네트워크 대역폭 사용량 감소
- 인덱스 빌드 시간 단축의 이점
이 내용을 확인하세요. 동반 블로그 게시물에서 전체 텍스트 인덱스 정의의 뉘앙스에 대한 자세한 내용을 확인하세요. 카우치베이스 버킷 컬렉션으로.
퀵 에디터 소개
새로운 퀵 에디터를 미리 살펴보세요:
스크린샷에 표시된 키스페이스 필드에서 버킷, 범위 및 컬렉션을 선택하면 필드 선택 섹션에 샘플 문서가 나타납니다. bucket.scope.collection
를 선택합니다. 필드 선택 섹션의 오른쪽 상단에 있는 새로 고침 버튼을 사용하면 컬렉션 내의 문서를 (무작위로) 반복해서 살펴볼 수 있습니다.
이제 문서에서 필드 이름/값을 클릭하여 필드를 선택할 수 있습니다. 선택한 필드가 필드 구성 섹션에 구성할 수 있도록 표시됩니다. 필드 유형이 자동으로 감지됩니다(현재는 텍스트, 숫자 그리고 부울 가 인식됨). 필드가 날짜 시간 (문자열 ISO-8601 형식) 또는 지오포인트 (객체, 배열 또는 지오해시)를 사용하려면 유형 드롭다운에서 유형을 명시적으로 선택해야 합니다.
구성된 필드가 추가
-를 클릭하면 아래에서 볼 수 있듯이 매핑된 필드 섹션에 표시됩니다. 매핑된 필드는 필드 선택 섹션 또는 매핑된 필드 섹션에서 언제든지 다시 선택하여 편집할 수 있습니다.
페이지 하단의 색인 생성 버튼을 사용하면 색인을 만들 수 있습니다.
필드를 구성하는 데 사용할 수 있는 설정은 다음과 같습니다:
-
- 유형 는 필드 값의 유형입니다. 지원되는 유형은 위에 설명된 대로 텍스트, 숫자, 부울, 지오포인트 및 날짜/시간입니다.
- 이 필드를 식별자로 색인화 는 선택한 필드 유형이 텍스트. 이 옵션을 선택하면 텍스트에 키워드 분석기가 적용됩니다.
- 그리고 언어 필드 유형이 다음과 같은 경우 드롭다운을 사용할 수 있습니다. 텍스트 로 설정되어 있고 필드가 식별자로 인덱싱되지 않습니다. 언어 드롭다운에서 텍스트 필드에 대한 분석기를 선택할 수 있습니다.
- 다음 네 개의 확인란은 기본적으로 필드에 지원되는 단일 옵션 또는 여러 옵션의 조합(표준 편집기에서와 같이)으로 변환됩니다:
다음을 수행할 수 있습니다. 여기에서 이러한 옵션에 대한 자세한 문서를 확인하세요..
-
- 마지막 섹션은 다음을 설정하는 섹션입니다. 다른 이름으로 검색 가능필드의 별칭 역할을 하는 텍스트 입력을 받습니다. 이 설정은 선택 사항이며 기본값은 선택한 필드의 이름입니다. 검색 중에 이 섹션의 항목이 검색할 필드가 됩니다.
빠른 편집기 또는 표준 편집기를 사용하여 언제든지 빠른 편집기 내에서 설정한 색인을 편집할 수 있습니다.
퀵 에디터의 제한된 옵션
-
- 앞서 언급했듯이, 퀵 에디터는 간소화를 위해 인덱스 정의를 구성하는 제한된 옵션을 제공합니다.
- 필드 선택 섹션에 로드된 샘플 문서에서 사용할 수 없는 필드는 색인을 생성할 수 없습니다.
- 사용자 지정 분석기는 지원되지 않습니다.
- 지오포인트 그리고 날짜 시간 필드는 자동으로 인식되지 않습니다. 그러나 선택 시 필드 유형을 명시적으로 설정할 수 있습니다.
- 빠른 편집기를 사용하여 표준 편집기를 사용하여 생성한 인덱스를 편집할 수 없습니다. 하지만 표준 편집기를 사용하여 빠른 편집기로 만든 인덱스를 편집할 수 있습니다.
- 여러 컬렉션 내에서 필드를 설정할 수는 있지만, 단일 컬렉션 내에서 동일한 필드를 여러 번 색인할 수는 없습니다.
- 퀵 에디터는 문서 내 필터링을 지원하지 않습니다.
scope.collection
(특정 유형의 문서만 색인화하기 위해). - 빠른 편집기에서는 인덱스 복제본, 인덱스 유형 또는 인덱스 파티션을 설정할 수 없습니다. 인덱스를 만들 때 기본값이 적용됩니다. 그러나 표준 편집기를 사용하여 이러한 설정을 변경한 다음 빠른 편집기를 사용하여 인덱스 정의를 편집할 수 있습니다.
params.mapping
그리고params.doc_config
인덱스 정의의 섹션은 표준 편집기* 내에서 변경되지 않습니다.
*이 동작은 빠른 편집기 내에서 지원을 확장함에 따라 변경될 수 있습니다.
표준 편집기 변경 사항
가장 먼저 달라진 점은 인덱스 이름과 버킷 항목 아래에 기본이 아닌 범위 또는 기본이 아닌 컬렉션을 구독하도록 인덱스를 설정할 것인지 묻는 새로운 확인란이 있다는 점입니다:
확인란 접두사 활성화하기 scope.collection
를 params.doc_config.mode
를 사용하여 인덱스 정의 내에서 인덱스가 범위 내에서 하나 이상의 컬렉션을 구독할 수 있음을 의미합니다. 이 scope.collection
접두사는 기존 설정과 함께 작동합니다. type_field
, docid_prefix
그리고 docid_regexp
를 사용하여 색인할 문서를 필터링합니다.
확인하면 기본값이 아닌 범위/컬렉션 사용 상자를 선택하면 드롭다운이 나타납니다. 여기에서 선택한 버킷에 대해 사용 가능한 범위 중에서 범위를 선택할 수 있습니다:
이제 유형 매핑 내에서 드롭다운에서 컬렉션을 선택하라는 메시지가 표시됩니다. (기본값이 아닌 범위를 선택하면 인덱스 정의가 범위를 초월할 수 없으므로 기본 유형 매핑을 선택 취소해야 합니다.) 참고.
컬렉션을 선택하면 유형 이름을 추가할 수 있는 옵션이 있습니다. .
컬렉션 내에서 색인할 문서를 필터링하기 위해 선택한 유형 식별자를 기반으로 합니다. 이 유형 매핑은 언제든지 편집할 수 있습니다. 그리고 이전과 마찬가지로 유형 매핑 내에 하위 매핑과 하위 필드를 추가할 수 있습니다.
표준 편집기 내의 나머지 기능은 변경되지 않습니다.
컬렉션 인식 전체 텍스트 색인 검색
전체 텍스트 검색 색인 내에서 검색하는 UI는 변경되지 않았습니다. 텍스트 상자는 쿼리 문자열만 지원합니다. 참조 이 문서 페이지에서 전체 텍스트 인덱스가 지원하는 다른 유형의 쿼리에 대해 설명합니다..
이제 엔드포인트로 직접 연결되는 검색 요청은 새로운 인수(선택 사항)를 사용하여 전체 텍스트 인덱스가 구독하는 컬렉션 또는 컬렉션 집합의 결과만 가져오도록 합니다.
다음은 검색 요청 예시입니다:
1 2 3 4 5 6 7 |
curl -XPOST -H "콘텐츠 유형:애플리케이션/json" -u 사용자 이름:비밀번호 http://IP:8094/api/index/index_name/query -d '{}' "query": {..}, "limit": 10, "오프셋": 0, "ctl": {..}, "컬렉션": ["collection1", "collection2"] }' |
켜짐 카우치베이스 웹 콘솔를 설정할 수 있지만 컬렉션
인수를 사용하면 검색 요청은 색인된 콘텐츠에 걸쳐 모두 인덱스가 구독하는 컬렉션입니다.
빠른 편집기를 사용하여 설정한 인덱스 정의 샘플을 살펴보겠습니다. 이 인덱스는 컬렉션을 구독합니다. 맥주
그리고 양조장
범위 내 콘텐츠
버킷의 기본값
. 이 두 컬렉션 내에서 이름 필드는 다음 옵션이 설정된 상태로 인덱싱됩니다:
-
- 검색 결과에 포함
- 하이라이트 지원
다음은 인덱스 정의의 관련 내용입니다:
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 |
{ ... "name": "default", "sourceName": "default", "params": { "매핑": { "types": { "content.beer": { "동적": false, "enabled": true, "속성": { "name": { "동적": false, "enabled": true, "fields": [ { "분석기": "en", "IN_IN_ALL": true, "include_term_vectors": true, "store": true, "index": true, "name": "name", "type": "text" } ] } } }, "content.brewery": { "동적": false, "enabled": true, "속성": { "name": { "동적": false, "enabled": true, "fields": [ { "분석기": "en", "IN_IN_ALL": true, "include_term_vectors": true, "store": true, "index": true, "name": "name", "type": "text" } ] } } } } } } } |
위의 예처럼 인덱스 정의가 검색을 위해 둘 이상의 컬렉션을 구독하는 경우 문서가 속한 컬렉션이 키 _$c
.
다음은 위의 전체 텍스트 검색 색인 정의에 대한 검색 결과 스니펫 샘플입니다:
Couchbase 7.0에 대해 자세히 알아보기
Couchbase 7.0과 모든 기능에 대해 자세히 알아볼 준비가 되셨나요? 다음 리소스를 확인해 보세요:
?지금 Couchbase Server 7.0 다운로드하기