카우치베이스 서버

카우치베이스 개발자 릴리스 - FTS의 새로운 기능은 무엇인가요?

Couchbase FTS는 새로운 전체 텍스트 인덱스 및 쿼리 엔진입니다. 작년에 소개해 드린 바 있습니다. 이 게시물참조 문서 를 참조하여 어떤 기능을 사용할 수 있는지 알아보세요.

이번 카우치베이스 개발자 릴리스에서 FTS의 새로운 기능을 소개합니다.

유형 매핑

과거에는 유형 매핑을 선언하는 방법이 한 가지뿐이었는데, 문서 유형을 구분하는 데 사용할 필드(기본값은 '유형' 필드)를 FTS에 알려주는 것이었습니다. 모든 문서에 공통 필드를 유형 선택기로 사용하는 것이 유용하고 일반적인 방법이지만, 이것이 유일한 방법은 아닙니다. 그래서 문서 간에 유형을 구분하는 다른 방법을 추가했습니다.

  • 구분 기호까지의 문서 ID: 유형 식별자는 문서 키의 접두사이며, 지정된 문자까지 포함하되 포함하지 않습니다.
  • 정규식을 사용한 문서 ID: 고급 사용자의 경우 유형 식별자와 일치하는 정규식을 지정할 수 있습니다.

이것이 여행 샘플에 어떻게 적용되나요? 모든 문서 키의 패턴은 동일합니다. 다음은 몇 가지 예입니다:

항공사_10, 항공사_10748, 호텔_6445, 호텔_9905, 랜드마크_10019, 랜드마크_9838, 노선_10009, 노선_14273, 노선_9807

보시다시피 모두 밑줄, 숫자보다 유형, 밑줄보다 숫자로 시작합니다. 밑줄을 구분 기호로 사용하면 모두 밑줄과 숫자보다 유형이 문자열로 시작됩니다. 따라서 옵션을 '_'로 설정하여 DOC ID를 구분 기호까지 사용할 수 있습니다. 이는 문서의 유형이 포함된 필드가 'type'이라고 말하는 것과 동일합니다. 이것이 바로 우리가 사용하는 방식입니다.

이제 여기서 또 다른 패턴을 식별할 수 있습니다. 모든 DOC ID는 밑줄 문자까지 소문자로 시작합니다. 길이는 5자에서 8자 사이입니다. 숫자보다 더 많습니다. 이 관찰을 다음 정규식으로 변환할 수 있습니다: ^[a-z]{5,8}

이 표현식은 문자열의 시작 부분(^ 덕분에)과 길이가 5에서 8 사이({5,8} 덕분에)인 'a'와 'z' 사이의 모든 문자([a-z] 덕분에)를 일치시킵니다.
따라서 다음과 같이 옵션을 설정하여 정규식이 포함된 문서 ID 옵션을 사용할 수 있습니다. ^[a-z]{5,8}. 정규식은 때때로 복잡하지만 고급 필터링을 수행할 수 있습니다.

정렬

이번 릴리즈의 또 다른 새로운 기능은 정렬입니다. 이전 버전에서도 정렬 기능을 사용할 수 있었다고 생각하실 것입니다. 그 말이 맞습니다. 검색과 일치하는 모든 문서에는 관련성 점수가 있으며 결과는 항상 내림차순 점수에 따라 정렬됩니다. 하지만 이제 사용자가 직접 정렬 순서를 지정할 수 있습니다. FTS 쿼리에 다음과 같이 작동하는 정렬 필드를 추가했습니다:

"sort" : [ "국가", "주", "도시", "-score" ]

여기서 결과는 국가, 주, 도시가 비슷한 경우 주와 도시보다 국가를 먼저 정렬합니다. 그런 다음 모두 동일한 경우 점수 내림차순으로 정렬됩니다. 정렬 필드 앞에 '-' 문자를 붙여 내림차순으로 정렬합니다. 또한 정렬 배열의 모든 필드가 인덱스에 저장되어 있는지 확인해야 합니다. 이것이 전체 FTS 쿼리의 모습입니다:

{ "설명": false, "필드": [ "title" ], "highlight": {}, "sort": ["국가", "주", "도시", "-score", "-_id"], "query":{ "쿼리": "아름다운 수영장" } }

Java를 사용하는 경우, 예를 들어 여행 샘플 앱 예를 들어 사용자 지정 정렬을 쉽게 추가할 수 있습니다. 호텔 서비스를 열고 findHotels 메서드로 이동하기만 하면 됩니다. 다음과 같이 보일 것입니다:

실행할 쿼리는 기본적으로 이 코드 줄입니다: 검색 쿼리 쿼리 = 새 검색 쿼리("hotels", fts).limit(100);
그리고 정렬 메서드에 호출을 추가하기만 하면 됩니다: 검색 쿼리 쿼리 = 새 검색 쿼리("hotels", fts).limit(100).sort("국가", "주", "도시", "-score")

고급 옵션도 사용할 수 있습니다.

백엔드

변경되었지만 최종 사용자에게는 보이지 않는 것은 FTS 인덱스 백엔드를 변경했다는 점입니다. ForestDB를 사용하던 것에서 Mossmoss는 간단하고 빠르며 정렬되고 지속 가능한 golang용 키 값 저장 라이브러리로, "메모리 지향 정렬 세그먼트"의 약자입니다. 다음은 README에서 가져온 기능 목록입니다:

  • 정렬된 키-값 수집 API
  • 100% 이동 구현
  • 키 범위 반복기
  • 스냅샷은 격리된 읽기를 제공합니다.
  • 배치 API를 통한 원자 변이
  • 병합 작업을 통해 쓰기 작업이 많은 사용 사례(예: 카운터 업데이트)에 대한 읽기-계산-쓰기 최적화가 가능합니다.
  • 동시 독자와 작성자는 서로를 차단하지 않습니다.
  • 추가 메모리 복사를 피하기 위한 선택적 고급 API
  • 쓰기에는 추가 전용 디자인을 사용하고 읽기에는 구성 가능한 압축 정책과 함께 mmap()을 사용하는 선택적 하위 수준 스토리지 구현인 "mossStore"를 참조하세요: OpenStoreCollection()
  • mossStore는 읽기 전용 방식으로 이전 커밋 지점을 다시 탐색하고 이전 커밋 지점으로 되돌릴 수 있도록 지원합니다.
  • 고급 사용자가 제공하고자 하는 하위 수준의 스토리지 구현에 쓰기-백 캐싱을 허용하는 선택적 지속성 후크(예: leveldb, sqlite 등에 이끼를 연결할 수 있음).
  • 이벤트 콜백을 통해 비동기 작업을 모니터링할 수 있습니다.
  • 단위 테스트
  • GO-FUZZ & SMAT을 통한 퍼즈 테스트(github.com/mschoch/smat); 참조 README-smat.md

상당히 낮은 수준이기 때문에 자세히 설명하지는 않겠습니다. 하지만 이와 같은 낮은 수준의 아키텍처에 대해 더 많은 정보를 원하신다면 알려주시면 감사하겠습니다. 모스나 Couchbase Server의 다른 구성 요소에 대해 더 자세히 알아보고 싶으신가요? 그렇다면 트위터나 아래 댓글을 통해 알려주세요.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 로랑 도귄

Laurent는 파리에 사는 괴짜 금속공학도입니다. 주로 Java로 코드를 작성하고 AsciiDoc으로 구조화된 텍스트를 작성하며 데이터, 리액티브 프로그래밍 및 기타 유행어에 대해 자주 이야기합니다. 또한 Clever Cloud와 Nuxeo의 개발자 옹호자로 활동하며 해당 커뮤니티가 더 크고 강력하게 성장할 수 있도록 자신의 시간과 전문성을 바쳤습니다. 현재 Couchbase에서 개발자 관계를 운영하고 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.