Вимоги: Повнотекстовий пошук на сайті — це поширена функція, і вона часто застосовується на її основіElasticSearch、SolrРозгортання та розробка, а тепер випущено два новихRedisSearch、MeiliSearchПерші два важчі, хоча останні два не такі важкі, як перші два, але все одно потребують залежних сервісів, у цій статті використовується Lucene.Net + Jieba.NET для створення легкого пошуку на сайті.
Lucene.Net
Lucene.Net є .NET-портом Lucene і відкритим набором для розробки повнотекстових пошукових систем, тобто це не повнотекстовий пошуковий двигун, а повноцінна архітектура пошукової системи, яка забезпечує повноцінний пошуковий двигун і індексацію.
Сайт:Вхід за гіперпосиланням видно. Адреса GitHub:Вхід за гіперпосиланням видно.
Jieba.NET
Jieba.NET — це дієприкметник китайської цзеба. Версія .NET (реалізація на C#). Він може виконувати такі функції, як сегментація слів, анотація частин мови, вилучення ключових слів тощо для китайського тексту, а також підтримує власні словники.
Адреса GitHub:Вхід за гіперпосиланням видно.
Спершу розглянемо візуалізації:
Налаштуйте аналізатор
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream у Lucene TokenStream: Потік, отриманий після обробки токенайзера. Цей потік зберігає різноманітну інформацію про сегментацію слів, яку можна ефективно отримати через TokenStream. Нижче наведено процес конвертації файлового потоку у TokenStream. Спочатку використовуйте токенайзер для сегментації слів, різні токенізатори мають різних токензієрів, після розділення токензієра відфільтруйте дані, які були розділені на слова, через 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, StoredField, Будь ласка, використовуйте відповідний тип даних відповідно до вашої ситуації.
TextField проти StringField
TextField обов'язково буде лексикалізований, StringField не виконуватиме лексичний аналіз вмісту, збереженого в документі, див. також:Вхід за гіперпосиланням видно.
Пошук складених зустрічей
Існує 6 комбінацій наступного:
1. MUST і MUST: Отримати перетин послідовних запитів. 2. MUST і MUST_NOT: Вказує, що результати пошуку за запитом, що відповідає MUST_NOT, не можуть бути включені до результатів запиту. 3.SHOULD і MUST_NOT: При безперервному використанні функція є такою ж, як MUST і MUST_NOT. 4. Коли SHOULD і 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 (string fullPath, режим FileMode, FileAccess Access, FileShare share, FileOptions options)
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 нових документів (пов'язаних із моєю реальною ситуацією, лише для довідки), а диск займає 119 КБ, як показано на рисунку нижче:
(Кінець)
|