Wymagania: Wyszukiwanie w pełnym tekstie na stronie jest powszechnie używaną funkcją i jest powszechnie wykorzystywane właśnie na jej podstawieElasticSearch、SolrWdrożenie i rozwój, a teraz wydano dwa noweRedisSearch、MeiliSearchWyszukiwarka, pierwsze dwie są cięższe, choć ostatnie dwa nie są tak wymagające jak pierwsze, ale nadal wymagają wdrożenia usług zależnych, ten artykuł wykorzystuje Lucene.Net + Jieba.NET do zbudowania lekkiego wyszukiwania na stronie.
Lucene.Net
Lucene.Net jest portem .NET Lucene i jest open-source pełnotekstowym zestawem do tworzenia wyszukiwarek, czyli nie jest pełnotekstową wyszukiwarką, lecz architekturą pełnotekstową oferującą kompletną wyszukiwarkę i indeksację.
Miejsce:Logowanie do linku jest widoczne. Adres GitHub:Logowanie do linku jest widoczne.
Jieba.NET
Jieba.NET to chińska jieba z imiesłem. .NET (implementacja w C#). Może wykonywać funkcje takie jak segmentacja słów, adnotacja części mowy, ekstrakcja słów kluczowych itp. dla tekstu chińskiego oraz wspiera niestandardowe słowniki.
Adres GitHub:Logowanie do linku jest widoczne.
Najpierw przyjrzyjmy się wizualizacjom:
Dostosuj analizator
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream w Lucene TokenStream: Strumień uzyskany po przetworzeniu tokenizera. Ten strumień przechowuje różne informacje o segmentacji słów, które można skutecznie uzyskać za pomocą TokenStream. Poniżej opisano proces konwersji strumienia plików na TokenStream. Najpierw użyj Tokenizera do segmentacji słów, różne tokenizery mają różne tokenziery, po oddzieleniu tokenziera przefiltruj dane podzielone na słowa przez TokenFilter, takie jak stop. Po filtrowaniu połącz wszystkie dane w TokenStream.
Odniesienie:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Aby dostosować analizator Lucene na podstawie Jieba.NET, pierwsze odniesienie jest następujące:
Bezpośrednio odwołaj się do pakietu Lucene.Net.Analysis.Common, ponieważ Lucene.Net.Analysis.Common polega na automatycznym pobieraniu pakietu Lucene.Net.
Stwórz nowy JiebaTokenizer.cs z następującym kodem:
Stwórz nowy JiebaAnalyzer.cs z następującym kodem:
Lucene.Net Tworzenie nowych dokumentów i wyszukiwań
Dodaj dane ze strony internetowej do Lucene regularnie lub wyzwalano, a Lucene przechowuje dokument na fizycznym dysku przez analizator, a następnie wywołuje interfejs wyszukiwania, aby go znaleźć.
Kod klasy pomocy LuceneHelper wygląda następująco:
Przechowywanie w sklepie
Store.YES: Nie tylko indeksuje dane, ale także je zapisuje, dzięki czemu wyniki wyszukiwania mogą zwracać informacje o polach. Store.NO: Indeksowane będą tylko dane, a dane nie będą zapisywane, a wyniki wyszukiwania nie mogą uzyskać informacji o tym polu.Oszczędza miejsce na dysku;
Jak pokazano poniżej:
Typ pola pola
Typy pól w Lucene.Net to: Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Prosimy o użycie odpowiedniego typu danych dostosowanego do Twojej sytuacji.
TextField vs. StringField
TextField na pewno zostanie leksykalizowany, StringField nie wykona analizy leksykalnej treści zapisanej w doc, zobacz:Logowanie do linku jest widoczne.
Wykonaj przeszukanie złożone
Istnieje 6 kombinacji następujących cech:
1. MUST i MUST: Uzyskaj przecięcie kolejnych klauzul zapytań. 2. MUST i MUST_NOT: Oznacza, że wyniki wyszukiwania klauzuli zapytania odpowiadającej MUST_NOT nie mogą być uwzględnione w wynikach zapytania. 3. SHOULD i MUST_NOT: Przy ciągłym użyciu funkcja jest taka sama jak MUST i MUST_NOT. 4. Gdy SHOULD i MUST są używane razem, wynik jest wynikiem wyszukiwania klauzuli MUST, ale SHOULD może wpłynąć na sortowanie. 5. POWINNO i POWINNO: Wskazuje relację między "lub", a ostatecznym wynikiem wyszukiwania jest suma wszystkich klauzul wyszukiwania. 6.MUST_NOT i MUST_NOT: bezsensowne, odzyskiwanie bez rezultatów.
Prowadź projekt
W tym momencie możesz rozpocząć projekt, aby dodać, zaktualizować i wyszukać kod interfejsu w następujący sposób:
Błędy mogą być zgłaszane w następujący sposób:
Podczas przetwarzania żądania wystąpił nieobsłużony wyjątek.
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(ciąg fullPath, tryb FileMode, dostęp do FileAccess, udostępnianie plików, opcje FileOptions)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Po instalacji możesz zobaczyć katalog Resources w katalogu pakiety\jieba.NET, który zawiera słownik i inne pliki danych potrzebne do uruchomienia jieba.NET, a najprostszą metodą konfiguracji jest skopiowanie całego katalogu Resources do katalogu, w którym znajduje się asemble, tak aby wbudowane domyślne wartości konfiguracyjne były używane jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet musi dodać folder konfiguracyjny, kod wygląda następująco:
Test stworzył 500 nowych dokumentów (związanych z moją faktyczną sytuacją, tylko dla odniesienia), a dysk zajmuje 119KB, jak pokazano na poniższym rysunku:
(Koniec)
|