Couchbase v6.5에서는 이제 전체 텍스트 검색이 Couchbase N1QL 쿼리 구성에 통합되었습니다. 이제 고객은 N1QL에서 직접 FTS 인덱스를 활용할 수 있습니다. 이를 통해 개발자는 단일 API로 N1QL의 정확한 술어 일치와 FTS의 강력한 검색을 결합할 수 있습니다.

관계형 데이터베이스를 사용하는 많은 애플리케이션 개발자가 직면하는 한 가지 지속적인 과제는 쿼리 성능입니다. 쿼리 성능 문제를 해결하기 위해서는 더 큰 데이터베이스 서버나 더 나은 인덱스를 확보하는 등 관계형 데이터베이스가 제공하는 기능으로 제한되는 경우가 많습니다.

Couchbase를 사용하면 N1QL 쿼리 성능도 유사한 구성 요소에 의존합니다. 그러나 관계형 RDBMS와 달리, 서비스 격리 아키텍처의 Couchbase는 쿼리 및 인덱스 서비스를 모두 독립적으로 확장할 수 있다는 것을 의미합니다. 적절한 크기 조정과 용량 계획을 통해 Couchbase는 다음과 같이 매우 빠른 성능을 제공할 수 있습니다. 알토로스 NoSQL 벤치마크 보고서.

쿼리 술어를 넘어서 - N1QL 및 검색

고객은 적절한 인덱스를 사용하여 쿼리에 대해 밀리초 단위의 응답 시간을 달성할 수 있습니다. 그러나 Couchbase GSI 인덱스에서 사용하는 쿼리 술어를 미리 알 수 없는 경우가 있습니다. 이상적인 솔루션은 사용 가능한 쿼리 술어의 모든 조합에서 작동할 수 있는 인덱싱 시스템을 갖추는 것입니다.

카우치베이스 적응형 인덱싱은 이러한 사용 사례 중 많은 부분을 해결할 수 있습니다. Couchbase 전체 텍스트 검색은 불규칙한 패턴 사용 사례에 대한 또 다른 접근 방식입니다. 문서의 모든 필드에 대해 텍스트 및 퍼지 검색 기능을 제공합니다.

아래의 활동 관리 문서를 살펴보겠습니다. 활동:

  1. 항상 고객(계정) 소유
  2. 고객 조직의 여러 연락처를 보유할 수도 있으며 여러 연락처 배열로 표시될 수 있습니다.
  3. 여러 사용자로 대표되는 여러 참가자를 포함할 수 있습니다.
  4. 약속 또는 작업 유형일 수 있으며, 둘 다 제목, 시작일, 마감일 등과 같은 특정 해당 속성이 있습니다.
  5. 작업 유형의 활동에는 할 일 목록의 배열이 있습니다.

sample json document for examples sample documents for examples

사용 사례

콜센터의 서비스 담당자인 John은 고객과 통화하는 동안 모든 고객 활동을 검색해야 합니다. 고객은 John이 애플리케이션을 쿼리하기 위해 아래 값 중 하나 또는 여러 개를 제공할 수 있습니다:

  1. 활동 제목: 쿼리는 활동 제목의 어느 위치에서든 이 텍스트가 있는 모든 활동을 반환해야 합니다.
  2. 고객 이름: 입력한 고객 이름이 불완전할 수 있으므로 쿼리에서 와일드카드를 사용하여 고객 이름과 일치시켜야 합니다.
  3. 연락처 이름, 이메일 또는 전화 연락처: 고객은 연락처 세부 정보를 제공할 수도 있습니다. 이러한 정보는 불완전할 수도 있습니다.
  4. 참여자 이름: 고객은 또한 고객과 상호 작용하고 활동에 참여했던 Acme의 직원인 계정 관리자의 이름을 제공할 수 있습니다.
  5. 활동 날짜: 고객은 다양한 활동 날짜와 시간을 제공할 수 있습니다.
  6. 서비스 담당자는 위의 정보 중 하나 이상을 받을 수 있습니다. 패턴은 고정되어 있지 않습니다.
  7. 쿼리 응답 시간은 ~1초가 되어야 합니다.
  8. 데이터 양은 연간 3백만 건, 보존 기간은 3년입니다.

이 정보를 검색하는 데 어떤 어려움이 있나요?

  1. 고객이 제공할 수 있는 필드는 최대 8개까지이며, 이 중 필수 항목은 없습니다. 이는 인덱스 선택을 위해 인덱스 리딩 키가 있어야 하기 때문에 효율적인 GSI 인덱스 설계에 어려움이 될 수 있습니다. 결과적으로 GSI 지수는 모든 사례를 포괄할 수 없습니다.
  2. 와일드카드 매칭: 제공된 활동 제목, 고객 및 연락처 이름, 이메일 또는 전화가 불완전할 수 있으므로 정확한 N1QL 술어 매칭 기술이 작동하지 않을 수 있습니다.
  3. 연락처와 참가자는 모두 활동의 하위 객체입니다. JSON 데이터 모델에서 연락처와 참가자는 두 개의 개별 배열로 표현됩니다. 커버리지 인덱스가 필요한 경우 두 배열의 요소를 하나 이상 포함해야 합니다.

솔루션

1. 가장 간단한 접근 방식은 N1QL 술어를 사용하는 것입니다:

다음 GSI 인덱스도 필요합니다:

위의 쿼리는 쿼리 성능을 개선하기 위해 사용 가능한 인덱스 중 하나 또는 전부를 사용할 수 있습니다. 그러나 쿼리 계획이 IntersectScan 연산을 사용해야 하기 때문에 여전히 성능 문제가 있을 수 있습니다.

2. FTS 지수 활용

Couchbase 전체 텍스트 검색은 정확하지 않은 검색 기능과 원하는 순서대로 필드를 검색할 수 있는 기능으로 인해 이 사용 사례에 도움이 될 수 있습니다. 다음은 검색 기준을 포괄할 수 있는 FTS 색인입니다.

couchbase dialog for setting up a full text search index

2.1 CURL 사용 - Couchbase 5.5에서 지원됩니다.

2.2 SEARCH_QUERY를 사용한 N1QL/FTS 통합 시

2.3 N1QL 검색 술어를 사용한 N1QL/FTS 통합 사용 시

참고:

  1. 위의 예는 모든 술어를 단일 SEARCH() 함수로 결합하기 위해 접속사 구조와 함께 FTS 복합 쿼리를 활용합니다. 다음에 대한 자세한 내용은 Couchbase FTS 설명서를 참조하세요. FTS 쿼리 유형
  2. 위의 문은 필요한 검색 술어만 포함하도록 프로그래밍 방식으로 구성해야 합니다.
  3. FTS 인덱스 디자인에는 SEARCH() 함수에서 사용되는 필드가 포함되어야 합니다.
  4. N1QL 술어 a.type='activity' 는 FTS 인덱스 선택을 위한 쿼리에 반드시 존재해야 합니다.

N1QL SEARCH_QUERY 및 SEARCH 술어는 Couchbase v6.5에서 사용할 수 있는 N1QL/FTS 통합 기능의 일부이며, 문서가 제공되면 블로그에 업데이트할 예정입니다.

FTS 쿼리 구문에 대한 자세한 내용은 다음과 같이 확인하세요. https://docs.couchbase.com/server/6.0/fts/full-text-intro.html

N1QL 및 검색 요약:

  1. N1QL/FTS 통합을 통해 쿼리에서 FTS 검색 구문을 검색 술어로 직접 사용할 수 있습니다.
  2. N1QL 쿼리에서 FTS 인덱스를 사용하면 각 쿼리 패턴에 대한 정확한 인덱스가 필요하지 않습니다.
  3. N1QL/FTS는 개발자가 쿼리 성능 문제를 처리할 때 탐색할 수 있는 추가 옵션을 제공합니다.
  4. FTS 인덱스는 여러 필드를 어떤 순서로든 검색해야 하는 경우에 적합합니다.
  5. FTS 인덱스는 여러 배열의 필드를 검색해야 하는 경우에 적합합니다.

리소스

6.5의 기능이 마음에 드셨는지, 앞으로 비즈니스에 어떤 도움이 될지 여러분의 의견을 듣고 싶습니다. 댓글을 통해 의견을 공유해 주시거나 포럼.

작성자

게시자 Binh Le

Binh Le는 Couchbase 쿼리 서비스의 수석 제품 관리자입니다. Couchbase에 입사하기 전에는 Oracle에서 근무하며 Sales Cloud Analytics 및 CRM OnDemand의 제품 관리 팀을 이끌었습니다. 영국 브라이튼 대학교에서 컴퓨터 공학 학사 학위를 받았습니다.

댓글 남기기