.NET

Couchbase 4.5를 사용한 .NET의 전체 텍스트 검색

전체 텍스트 검색(또는 FTS) 는 Couchbase 4.5에서 개발자 프리뷰로 출시되는 새로운 기능입니다. 프로덕션용이 아니며 아직 지원되지 않지만 앞으로의 기능을 미리 엿볼 수 있습니다.

검색 기능을 제공할 때는 간단한 '%foo%' 처럼 와 함께 N1QL 만으로는 충분하지 않습니다. 사용자는 언어를 인식하고 관련성에 따라 검색 결과의 순위를 매기는 보다 풍부한 검색 환경을 기대합니다.

이 블로그 게시물에서는 이를 보여드리겠습니다:

  • 전체 텍스트 검색 색인을 설정하는 방법
  • 전체 텍스트 검색 쿼리를 실행하는 방법 카우치베이스 콘솔
  • ASP.NET에서 강조 표시를 사용하여 전체 텍스트 검색 쿼리를 실행하는 방법

전체 텍스트 검색 색인 설정

먼저 다음을 사용하고 있는지 확인해야 합니다. Couchbase 4.5(베타 버전 이상)를 클릭하여 Couchbase 콘솔에 액세스할 수 있고 클러스터가 전체 텍스트 서비스를 실행 중인지 확인합니다. 전체 텍스트 서비스가 실행 중인지 여부는 Couchbase 콘솔에서 "서버 노드"를 클릭하여 확인할 수 있습니다. 클러스터에 노드를 추가할 때 전체 텍스트와 같은 서비스를 활성화/비활성화해야 합니다. 다시 한 번 복습이 필요한 경우 내 윈도우에 카우치베이스 설치 및 설정 방법에 대한 블로그 게시물.

Server Nodes - Services available

전체 텍스트 검색 색인을 설정하려고 합니다. 여행 샘플 샘플 데이터 버킷이 필요합니다. 설정 -> 샘플 버킷으로 이동하여 '여행 샘플'을 선택한 다음 "만들기"를 클릭하여 설치할 수 있습니다.

Create a sample bucket

이 샘플 데이터에는 '랜드마크' 유형의 문서가 있습니다. 무엇보다도 이 문서에는 '콘텐츠' 필드가 포함되어 있습니다. 다음은 랜드마크 문서 중 하나의 스니펫입니다. (따라가시는 경우 ID 'landmark_16079'입니다):

이 구조를 염두에 두고 색인을 만들어 보겠습니다. 색인->전체 텍스트로 이동하여 "새 전체 텍스트 색인"을 클릭합니다.

인덱스의 이름을 지정하겠습니다. travel-sample-idx를 클릭하고 여행 샘플 버킷을 추가합니다. 여기에는 많은 옵션이 있지만 여기서는 유형 매핑에 대해서만 다루겠습니다. "유형 매핑"을 확장하고 "유형 매핑 추가"를 클릭합니다. 이렇게 하면 전체 텍스트 검색을 특정 유형의 문서(이 경우 '유형' 필드와 일치하는 '랜드마크')로 제한할 수 있습니다. 또한 "지정된 필드만 색인" 상자를 선택하면 문서의 모든 필드가 검색을 위해 색인됩니다. "확인"을 누릅니다.

Create full text search for landmark documents

그런 다음 '랜드마크' 유형 매핑 위에 마우스를 가져간 다음 + 기호를 클릭하고 '하위 필드 삽입'을 클릭합니다. 문서 계층 구조에서 더 아래에 있는 검색 데이터의 색인을 생성하려면 필요한 만큼의 레벨까지 '하위 매핑 삽입'을 수행해야 합니다. 저희의 경우 콘텐츠 필드는 루트 레벨에 있으므로 그렇게 할 필요가 없습니다.

하위 필드의 경우 필드에 필드 이름("콘텐츠")을 입력하고 다른 항목은 그대로 둔 채 "저장" 확인란(나중에 자세히 설명)을 선택한 후 "확인"을 누릅니다.

Create child field for full text search

마지막으로 '기본' 유형 매핑을 편집하고 '사용' 옵션을 선택 취소합니다. 이 매핑을 사용하면 모든 문서에서 검색이 가능하지만 이 예에서는 랜드마크로만 제한하려고 합니다. "확인"을 누르고 "색인 만들기"를 누릅니다.

Disable default type mapping on full text search

"색인 생성"을 누르면 방금 생성한 색인의 개요가 표시됩니다. 즉시 문서 색인 생성이 시작됩니다. 색인 생성 후 새로 고침 버튼을 누르면 지금까지 색인된 문서의 수가 표시됩니다.

Full Text Search indexing in progress

완료되면 100%가 됩니다.

Full Text Search indexing complete

Couchbase 콘솔에서 전체 텍스트 검색 쿼리를 실행합니다.

C#/.NET으로 들어가기 전에 콘솔에서 바로 전체 텍스트 검색을 시도해 볼 수 있습니다. 색인->전체 텍스트로 이동하여 방금 만든 전체 텍스트 색인을 선택합니다. 검색어를 입력합니다(여행 샘플을 사용하는 경우 '여관', '초고층 빌딩' 또는 '민박'이 좋은 용어입니다.

Using the full text search

검색을 클릭하면 관련성 점수 순으로 검색 결과 페이지(문서 ID 및 콘텐츠 조각)가 표시됩니다. 콘텐츠 조각에서 검색어가 강조 표시되어 있는 것을 확인할 수 있습니다. 하위 필드에서 '저장'을 활성화하면 이 기능이 작동합니다. 저장을 활성화하지 않으면 여전히 관련성 있는 순서대로 문서 결과가 표시되지만 강조 표시된 콘텐츠 조각은 표시되지 않습니다.

Full Text Search results in Couchbase Console

전체 텍스트 검색은 Bleve를 사용하여 더 복잡한 검색(정확한 구문, 부울 쿼리 등)을 할 수 있습니다. 검색해 보기 "침대와 아침 식사" 또는 침대 - 조식를 클릭하고 어떤 일이 발생하는지 확인하세요.

ASP.NET에서 강조 표시가 포함된 전체 텍스트 검색 쿼리

생성한 전체 텍스트 검색 인덱스가 만족스러우면 이제 Couchbase 콘솔에서 실제 애플리케이션으로 가져올 차례입니다. 저는 Couchbase .NET SDK를 사용하여 전체 텍스트 검색을 수행하는 방법을 보여주는 예제를 ASP.NET으로 만들었습니다. 이 예제에서는 ASP.NET MVC에 익숙하고 ASP.NET과 Couchbase를 통합하는 기본 사항에 대해 잘 알고 있다고 가정합니다. 그렇지 않은 경우에는 이전에 블로그에 소개했던 ASP.NET "Hello World" 예제.

두 가지 작업을 만들었습니다: 색인 및 검색입니다. Index 액션은 사용자가 검색 문자열을 입력할 수 있는 보기를 표시합니다. 컨트롤러와 액션은 다음과 같습니다:

Index.cshtml의 보기는 다음과 같습니다:

예쁘지는 않지만 기능적으로는 훌륭합니다. 다음으로 검색 액션을 만들었습니다. 이 작업은 검색 쿼리를 받아 Couchbase에서 결과를 출력합니다. 결과는 문서 ID, 관련성 점수, 강조 표시된 조각 등 Couchbase 콘솔에서 본 것과 매우 유사하게 표시됩니다.

전체 텍스트 검색을 실행하려면 세 단계가 있습니다:

  1. 구현하는 객체를 인스턴스화합니다. ISearchQuery. 많은 옵션이 있습니다. 매치 쿼리 이 예제에서는
  2. 검색 옵션을 지정하려면 SearchParams 객체를 인스턴스화합니다.
  3. 사용 IBucket 를 사용하여 쿼리+매개변수를 실행하고 결과를 가져옵니다.

이 예제에서는 검색 작업에서 바로 세 단계를 모두 수행했습니다:

검색 매개변수에 대한 몇 가지 참고 사항입니다:

  • 처음 10개로 제한합니다. 페이징에 사용할 수 있는 Skip() 메서드도 있습니다.
  • 시간 제한을 10000ms로 설정하고 있습니다. 인덱스를 올바르게 만들면 결과가 매우 빠르게 반환되지만 인덱스를 수정하여 문제가 발생하면 검색이 빨리 실패하기를 원합니다.
  • 하이라이트 스타일을 HTML로 설정하고 있습니다. 이렇게 하면 태그를 조각 결과에서 강조 표시된 검색어 주위에 배치합니다.

또한 검색 결과 모델 보기 모델을 선택합니다. 이렇게 하면 검색 결과(및 사용자가 입력한 키워드)에서 문서 ID, 점수, 조각을 가져오는 데 필요한 매핑을 수행합니다.

마지막으로 Search.cshtml 보기입니다:

아주 예쁜 HTML 페이지는 아니지만 기능적으로는 훌륭합니다. 실제로 작동하는 모습은 다음과 같습니다:

Full Text Search results in ASP.NET

결론

이 기능은 개발자 프리뷰일 뿐이며 아직 지원되지 않으며 프로덕션 환경에서는 아직 권장되지 않습니다. 하지만 전체 텍스트 검색은 곧 Couchbase에 도입될 예정입니다. 실제로 이 기능이 구현되는 방식에 대해 의견을 제시할 수 있습니다. 전체 텍스트 검색 기능의 GitHub에서 전체 텍스트 검색 RFC를 클릭하고 자유롭게 질문하거나 피드백을 남겨주세요.

아직 질문이 있으신가요? 도움이 필요하신가요? 댓글을 남겨 주세요, 트위터에서 나를 핑하기를 참조하거나 이메일(matthew.groves AT couchbase DOT com)로 문의하세요.

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

작성자

게시자 매튜 그로브스

Matthew D. Groves는 코딩을 좋아하는 사람입니다. C#, jQuery, PHP 등 무엇이든 풀 리퀘스트를 제출할 정도로 코딩을 좋아합니다. 90년대에 부모님의 피자 가게를 위해 QuickBASIC POS 앱을 만든 이후로 전문적으로 코딩을 해왔습니다. 현재 Couchbase의 선임 제품 마케팅 관리자로 일하고 있습니다. 여가 시간에는 가족과 함께 축구 경기를 관람하고 개발자 커뮤니티에 참여하며 시간을 보냅니다. 그는 .NET의 AOP, .NET의 프로 마이크로서비스, Pluralsight 저자, Microsoft MVP의 저자이기도 합니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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