이 글은 다음 사항을 살펴보는 시리즈 3부입니다. NoSQL 데이터베이스의 데이터 구조. 이 게시물에서는 전체 텍스트 검색 카우치베이스의 데이터 구조에 대한 자연어 쿼리를 지원합니다.
- 1부: NoSQL 애플리케이션을 위한 데이터 구조 네이티브 컬렉션, 맵 등을 통해 간소화된 JSON 데이터 액세스를 사용했습니다.
- 2부: 데이터 구조 및 쿼리 N1QL/SQL 쿼리를 사용하여 데이터를 쿼리하는 데모를 시연했습니다.
전체 텍스트 검색 색인이란 무엇인가요?
전체 텍스트 검색 인덱싱은 문서의 텍스트 기반 데이터 구조를 분석하여 각 문서에서 발견된 단어를 기록합니다. 그러면 쿼리는 요청 시 색인을 사용해 해당 검색어가 포함된 문서를 효율적으로 찾을 수 있습니다. 전체 텍스트 검색 엔진은 다양한 유형의 검색 문제를 해결하기 위해 다양한 검색 알고리즘을 사용합니다.
Couchbase는 NoSQL 데이터 인덱싱과 SQL 기반 쿼리 서비스를 사용해 데이터 구조나 문서에서 정보를 검색합니다. 전체 텍스트 검색 인덱스와 검색 요청은 보다 유연한 방식으로 일치하는 문서를 찾습니다.
전체 텍스트 검색은 일치하는 목록을 반환합니다. 문서. 이와 대조적으로, N1QL 쿼리는 행 집합입니다. 텍스트 인덱스는 특정 값을 가진 행/열을 찾는 데 중점을 두는 표 형식 인덱스와 달리 반전 인덱스라고 합니다.
또한 전체 텍스트 검색은 검색 결과에 점수를 매기고 순서를 지정하여 가장 관련성이 높은 문서가 먼저 표시되도록 합니다.
전체 텍스트 인덱스가 생성되면 새 데이터가 데이터베이스에 들어올 때 업데이트됩니다. 데이터베이스 관리자는 특정 사용 사례(예: 대용량 쓰기 대 대용량 쿼리 등)에 맞게 인덱싱을 최적화할 수 있습니다.
기본 데이터 구조
맵, 목록, 집합, 대기열 등 몇 가지 간단한 데이터 구조가 Couchbase에 노출되어 있습니다. 각각은 JSON 데이터 유형으로 표시되며 NoSQL 문서로 저장됩니다. 이러한 데이터에 대한 기본적인 키 기반 액세스는 다른 게시물을 참조하세요.

기본 NoSQL 데이터 구조 예제
사용자/애플리케이션의 필요에 따라 구조의 특정 필드를 색인화할 수 있습니다. 검색이 요청되면 문자열을 인덱스와 비교하여 일치하는 문서 목록이 반환됩니다.
맵 기반 구조에만 필드 이름이 있고 카운터 및 목록 구조에는 필드 이름이 없습니다. 따라서 맵만 색인할 수 있습니다. 목록 안에 맵을 포함할 수도 있으며, 이 경우에도 작동합니다.
샘플 데이터 만들기
이 글의 목적을 위해 Python SDK를 사용하여 몇 가지 구체적인 구조를 만들었습니다. 이전 게시물 보기 자세한 지침은 여기에 간결하게 표시된 간단한 코드를 참조하세요. 여기서 아이디어는 사용자 프로필을 작성하고 사용 가능한 정보가 추가되는 대로 추가하는 것입니다.
1 2 3 4 5 |
<span 스타일="글꼴 무게: 400"># 지도</span> <span 스타일="글꼴 무게: 400">>>> db.map_add("tylerM","name","타일러", create=True)</span> >>> db.map_add("tylerM","주소",{"city": "켈로나", "country":"Canada"}) >>> db.map_add("tylerM","top3",["galaga","테트리스","던전"]) |
전체 텍스트 검색 데이터 구조
카우치베이스 텍스트 검색은 인덱스가 필요하다는 점에서 N1QL로 데이터 구조를 사용하는 것과 유사합니다. 검색 인덱스는 데이터베이스의 문서와 사용 사례에 따라 복잡성이 크게 달라집니다. 기본 제공 웹 UI 검색 탭을 사용하면 새 검색 인덱스를 쉽게 만들 수 있습니다.
참조 전체 텍스트 검색 인덱싱 모범 사례 에서 자세한 정보를 확인하세요.
데이터 구조 인덱싱
여기서는 데이터에 존재하는 것으로 알고 있는 특정 필드에 대한 인덱스를 만듭니다. 여기에는 기본값 매핑을 사용하면 새 필드가 온라인 상태가 되면 색인화할 수 있습니다. 프로덕션을 위해 최적화할 때는 이 기능을 해제하는 것이 좋습니다. 또한, 저는 store 옵션을 선택하면 검색 시 문서 목록뿐만 아니라 일치하는 텍스트도 함께 표시됩니다.

카우치베이스 전체 텍스트 검색 인덱스 생성 를 사용하여 데이터 맵 항목을 입력합니다.
검색 색인을 생성하면 기본 텍스트를 입력할 수 있는 검색창이 나타납니다. 고급 쿼리(퍼지 매칭접두사 일치, 지리적 공간)는 REST API 또는 Couchbase SDK를 사용하여 수행할 수 있습니다.
데이터 구조 검색
내장된 검색 도구를 사용하면 입력 텍스트와 일치하는 데이터 구조 객체를 찾을 수 있습니다. 지도 데이터 구조를 업데이트하면 추가 인덱싱 없이도 여기의 값이 자동으로 변경됩니다.

웹 UI를 통해 카우치베이스 데이터 구조 검색하기
이 예에서는 단일 단어나 용어를 검색하여 이름 필드. 어떤 필드에서든 해당 용어가 포함된 문서만 있는 경우 해당 문서도 반환합니다.
검색 상자에서 접두사를 사용하여 필드를 지정할 수도 있습니다. dot 구문을 사용하여 다른 항목 안에 하위 항목을 지정할 수 있습니다. 예를 들어 주소.국가:캐나다. 예를 들어 데이터베이스에 다른 사용자를 추가하고 맵에 새 필드를 추가한 경우와 같이 숫자 범위도 여기에 사용할 수 있습니다. 따라서 tylerM 지도에는 포함되지 않았고, 새로운 player1 항목이 반환됩니다.

숫자 범위 검색을 통한 필드 범위 지정.
일치하는 문서와 제가 특별히 색인한 필드를 반환했습니다. 그리고 점수 필드가 색인에 명시적으로 저장되지는 않았지만 색인이 생성되었으므로 일치하는 문서를 찾을 수 있습니다.
전체 텍스트 검색 SDK(Python)
개발자는 카우치베이스 검색 SDK를 사용하여 애플리케이션에서 데이터베이스를 직접 호출할 수 있습니다. SDK는 텍스트와 일치하는 문서 목록을 관련성 점수 값과 함께 반환합니다.
해당 언어의 SDK에 대한 자세한 내용은 다음을 참조하세요. 여기에서 문서에서 전체 텍스트 검색.
Couchbase SDK에서 지원하는 모든 언어는 각 쿼리 유형에 대한 사용자 정의 메서드를 사용하여 검색을 수행할 수 있습니다. 이 Python 코드에는 위의 예제를 복제하는 기본 연결 및 검색 프로세스가 포함되어 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
에서 카우치베이스.클러스터 가져오기 클러스터, 클러스터 옵션, 쿼리 옵션, 비밀번호 인증기 가져오기 카우치베이스.검색 as FT CONNSTR = "couchbase://localhost"; 버킷 = "샘플"; INDEX = "샘플"; 검색 = "tyler" 인증자 = 비밀번호 인증기("관리자", "관리자") 클러스터 = 클러스터(CONNSTR, 클러스터 옵션(인증자)) static_bucket = 클러스터.버킷(버킷) db = static_bucket.기본_컬렉션() qp = FT.쿼리 문자열 쿼리(검색) q = 클러스터.검색 쿼리(INDEX, qp, limit=100) 결과=[] 에 대한 r in q.행(): 인쇄(검색, "문서에서 발견됨:", r.id, "점수:", r.점수) |
일치하는 하나의 문서에 대한 세부 정보를 생성합니다:
1 |
타일러 발견됨 in doc: tylerM 점수: 0.11597946228887497 |
검색의 범위 및 컬렉션
Couchbase 7.0이 출시되면서 이제 문서의 하위 집합을 범위와 컬렉션으로 분류할 수 있습니다. 웹 콘솔을 사용하여 인덱스를 만들 때 '기본 범위가 아닌 범위 사용' 옵션을 선택할 수 있습니다. 드롭다운에서 범위를 선택한 다음 새 유형 매핑을 만들어 특정 컬렉션을 지정할 수 있습니다.

검색 색인에 대한 범위 및 컬렉션을 선택합니다.
여기서는 자세히 설명하지 않겠지만 SDK를 사용한 범위 및 컬렉션 수준 검색은 연결 수준 속성을 사용합니다.
1 |
dbscoped = 클러스터.버킷('travel-sample').범위('_default').컬렉션('customCollection') |
모든 것을 하나로 모으기
문서, 지도 및 기타 데이터 구조는 몇 가지 기본적인 SDK 사용법을 통해 매우 간단하게 만들 수 있습니다. 마찬가지로, 텍스트 검색 색인 방법을 전략적으로 사용하면 애플리케이션이 관리하는 데이터에 액세스할 수 있는 방법이 훨씬 더 다양해집니다.
실제로는 기본 JSON 배열, 문자열 등을 매핑하고 색인화하여 다른 액세스 메서드에서 사용할 수 있습니다.
Couchbase는 모든 것이 포함된 플랫폼이므로 시스템 아키텍처를 크게 간소화할 수 있습니다. 개발자는 큰 어려움 없이 바로 시작할 수 있습니다.