요구사항: 사이트에서 전체 텍스트 검색은 일반적으로 사용되는 기능이며, 이를 기반으로 하는 것이 일반적입니다탄성 검색、솔르배포와 개발, 그리고 이제 두 개의 새로운 제품이 출시되었습니다레디서치、메일리서치검색 엔진, 처음 두 개는 더 무겁지만, 마지막 두 개는 처음 두 개만큼 무겁지 않지만 여전히 의존 서비스를 배포해야 합니다. 이 글에서는 Lucene.Net + Jieba.NET 를 사용하여 가벼운 온사이트 검색을 구축합니다.
Lucene.Net
Lucene.Net 는 Lucene의 .NET 포트로, 오픈 소스 전체 텍스트 검색 엔진 개발 키트입니다. 즉, 완전한 텍스트 검색 엔진이 아니라 완전한 쿼리 엔진과 색인 엔진을 제공하는 전체 텍스트 검색 엔진 아키텍처입니다.
사이트:하이퍼링크 로그인이 보입니다. GitHub 주소:하이퍼링크 로그인이 보입니다.
Jieba.NET
Jieba.NET 는 중국어 계파의 분사입니다. .NET 버전 (C# 구현). 중국어 텍스트에 대해 단어 분할, 품사 주석, 키워드 추출 등의 기능을 수행할 수 있으며, 맞춤형 사전도 지원합니다.
GitHub 주소:하이퍼링크 로그인이 보입니다.
먼저, 렌더링을 살펴보겠습니다:
분석기 커스터마이즈하기
Lucene 내 Analyzer, TokenStream, TokenFilterTokenStream: 토크나이저가 처리된 후에 얻는 스트림입니다. 이 스트림은 TokenStream을 통해 효과적으로 얻을 수 있는 워드 세분화에 관한 다양한 정보를 저장합니다. 다음은 파일 스트림을 TokenStream으로 변환하는 과정입니다. 먼저 Tokenizer를 사용해 단어를 세분화합니다. 각 토큰제이저는 서로 다른 토큰지어를 가지고 있습니다. 토큰지어가 분리된 후, 스톱워드와 같은 단어로 나누어진 데이터를 TokenFilter를 통해 필터링합니다. 필터링 후 모든 데이터를 TokenStream으로 결합하세요.
참조:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
루센 분석기를 Jieba.NET 에 따라 맞춤화하기 위해 첫 번째 참고 자료는 다음과 같습니다:
Lucene.Net.Analysis.Common 패키지를 직접 참조하시기 바랍니다. Lucene.Net.Analysis.Common은 Lucene.Net 패키지에 의존하여 자동으로 다운로드합니다.
다음 코드로 새 JiebaTokenizer.cs을 생성하세요:
다음 코드로 새 JiebaAnalyzer.cs을 생성하세요:
Lucene.Net 새 문서 생성 및 검색
웹사이트에서 데이터를 정기적으로 또는 트리거된 방식으로 루센에 추가하면, 루센은 분석기를 통해 문서를 물리적 디스크에 저장한 후 검색 인터페이스를 호출해 문서를 찾습니다.
LuceneHelper 도움말 클래스 코드는 다음과 같습니다:
저장 공간
Store.YES: 데이터를 인덱싱할 뿐만 아니라 데이터를 저장하여 검색 결과가 필드 정보를 반환할 수 있도록 합니다. Store.NO: 데이터만 인덱싱되며, 데이터는 저장되지 않고, 검색 결과는 이 필드 정보를 얻을 수 없습니다.디스크 공간 절약;
아래에 나와 있습니다:
필드 필드 유형
Lucene.Net 의 필드 유형은 Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, 상황에 맞는 적절한 데이터 타입을 사용해 주세요.
텍스트필드 vs. 스트링필드
TextField는 반드시 어휘화될 것이며, StringField는 문서에 저장된 내용에 대한 어휘 분석을 수행하지 않습니다. 참고:하이퍼링크 로그인이 보입니다.
복합물 탐색 발생
다음 조합은 6가지가 있습니다:
1. MUST and MUST: 연속 쿼리 절의 교차점을 구합니다. 2. MUST 및 MUST_NOT: MUST_NOT에 해당하는 쿼리 절의 검색 결과가 쿼리 결과에 포함될 수 없음을 나타냅니다. 3. SHOULD와 MUST_NOT: 연속적으로 사용할 때, 이 기능은 MUST와 MUST_NOT와 동일합니다. 4. SHOULDY와 MUST를 함께 사용할 경우, 결과는 MUST 절의 검색 결과이지만, SHOULD는 정렬에 영향을 줄 수 있습니다. 5. SHOULD 및 SHOULD: "또는 "또는 "간의 관계를 나타내며, 최종 검색 결과는 모든 검색 절의 합집합입니다. 6.MUST_NOT와 MUST_NOT: 무의미하고, 결과 없는 회수.
프로젝트를 진행하세요
이 시점에서 다음과 같이 인터페이스를 추가, 업데이트, 검색하기 위해 프로젝트를 시작할 수 있습니다:
오류는 다음과 같이 보고될 수 있습니다:
요청을 처리하는 동안 처리되지 않은 예외가 발생했습니다.
DirectoryNotFoundException: Could not find a part of the path 'C:\Users\itsvse_nuc11\source\repos\DiscuzSearch\DiscuzSearch\bin\Debug\net6.0\Resources\prob_trans.json'. Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(문자열 fullPath, FileMode 모드, FileAccess 접근, FileShare share, FileOptions 옵션)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net 설치 후에는 packages\jieba.NET 디렉터리의 Resources 디렉터리를 볼 수 있는데, 여기에는 jieba.NET 실행에 필요한 사전과 기타 데이터 파일이 포함되어 있습니다. 가장 쉬운 구성 방법은 어셈블리가 위치한 디렉터리에 전체 Resources 디렉터리를 복사하여 기본 설정 값을 jieba.NET 사용하는 것입니다.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet은 구성 폴더를 추가해야 하며, 코드는 다음과 같습니다:
이 테스트는 500개의 새 문서를 생성했는데(참고용으로는 제 실제 상황과 관련된), 디스크는 아래 그림과 같이 119KB를 차지합니다:
(끝)
|