Изисквания: Търсенето в пълен текст на сайта е често използвана функция и се прилага на база неяElasticSearch、SolrВнедряване и разработка, а сега са пуснати две новиRedisSearch、MeiliSearchПървите две са по-тежки, макар че последните две не са толкова тежки, колкото първите две, но все пак трябва да внедрят зависими услуги, тази статия използва Lucene.Net + Jieba.NET, за да изгради леко търсаче на място.
Lucene.Net
Lucene.Net е .NET порт на Lucene и представлява отворен комплект за разработка на търсачки с пълен текст, т.е. не е пълнотекстова търсачка, а архитектура на търсачка с пълен текст, която предоставя пълна машина за заявки и индексираща машина.
Сайт:Входът към хиперлинк е видим. GitHub адрес:Входът към хиперлинк е видим.
Jieba.NET
Jieba.NET е причастие китайско jieba. .NET версия (C# имплементация). Може да изпълнява функции като сегментиране на думи, анотация на части на речта, извличане на ключови думи и др. за китайски текст и поддържа персонализирани речници.
GitHub адрес:Входът към хиперлинк е видим.
Първо, нека разгледаме визуализациите:
Персонализирайте анализатора
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream в Lucene TokenStream: Поток, получен след обработка на токенайзера. Този поток съхранява различна информация за сегментацията на думите, която може ефективно да бъде получена чрез TokenStream. Следва процесът на преобразуване на файловия поток в TokenStream. Първо използвайте Tokenizer, за да сегментирате думите, различните токенизатори имат различни tokenzier-и, след като tokenzier-ът е отделен, филтрирайте данните, които са разделени на думи, чрез TokenFilter, като стоп думи. След филтриране, комбинирайте всички данни в TokenStream.
Препратка:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
За да се персонализира анализаторът на Lucene според Jieba.NET, първата препратка е следната:
Обърнете се директно към пакета Lucene.Net.Analysis.Common, тъй като Lucene.Net.Analysis.Common разчита на Lucene.Net пакета за автоматично изтегляне.
Създайте нов JiebaTokenizer.cs със следния код:
Създайте нов JiebaAnalyzer.cs със следния код:
Lucene.Net Създаване на нови документи и търсения
Добавяте данни от уебсайт към Lucene редовно или задействано, и Lucene съхранява документа на физически диск чрез анализатора и след това извиква интерфейса за търсене, за да го намери.
Кодът за помощен клас на LuceneHelper е следният:
Съхранение в магазина
Store.YES: Не само ще индексира данните, но и ще ги запази, така че резултатите от търсенето да могат да върнат информация за полето. Store.NO: Само данните ще бъдат индексирани, данните няма да се запазват, а резултатите от търсенето не могат да получат тази информация за полето.Спестява дисково пространство;
Както е показано по-долу:
Тип поле
Типовете полета в Lucene.Net са Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, Stored Field, Моля, използвайте подходящия тип данни според вашата ситуация.
TextField срещу StringField
TextField определено ще бъде лексикализиран, StringField няма да извършва лексикален анализ на съдържанието, съхранено в документа, вижте:Входът към хиперлинк е видим.
Търсене на сложни случаи
Има 6 комбинации от следните:
1. ЗАДЪЛЖИТЕЛНО и ЗАДЪЛЖИТЕЛНО: Да се получи пресечната точка на последователни клаузи за заявки. 2. MUST и MUST_NOT: Показва, че резултатите от търсенето на клаузата за заявка, съответстваща на MUST_NOT, не могат да бъдат включени в резултатите от заявката. 3.SHOULD и MUST_NOT: Когато се използва непрекъснато, функцията е същата като MUST и MUST_NOT. 4. Когато SHOULD и MUST се използват заедно, резултатът е резултатът от търсенето на клаузата MUST, но SHOULD може да повлияе на сортирането. 5. ТРЯБВА и ТРЯБВА: Показва връзката между "или", а крайният резултат от търсенето е обединението на всички клаузи за търсене. 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 (string fullPath, FileMode mode, FileAccess Access, FileShare share, опции FileOptions)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net След инсталацията можете да видите директорията Resources в директорията packages\jieba.NET, която съдържа речника и други файлове с данни, необходими за изпълнение на jieba.NET, а най-лесният метод за конфигуриране е да копирате цялата директория Resources в директорията, където се намира асемблерът, така че вградените стандартни конфигурационни стойности да се използват jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet трябва да добави конфигурационна папка, кодът е следният:
Тестът създаде 500 нови документа (свързани с моята реална ситуация, само за справка), а дискът заема 119KB, както е показано на фигурата по-долу:
(Край)
|