Anforderungen: Die Volltextsuche auf der Seite ist eine häufig verwendete Funktion und wird häufig darauf basierend eingesetztElasticSearch、SolrEinführung und Entwicklung, und nun wurden zwei neue veröffentlichtRedisSearch、MeiliSearchSuchmaschinen, die ersten beiden sind schwerer, obwohl die letzten beiden nicht so umfangreich sind wie die ersten beiden, müssen aber dennoch abhängige Dienste bereitgestellt werden; dieser Artikel verwendet Lucene.Net + Jieba.NET, um eine leichte Onsite-Suche zu erstellen.
Lucene.Net
Lucene.Net ist ein .NET-Port von Lucene und ein Open-Source-Volltext-Suchmaschinenentwicklungsset, d. h. es ist keine vollständige Volltextsuchmaschine, sondern eine Volltext-Suchmaschinenarchitektur, die eine vollständige Abfrage- und Indexierungsmaschine bereitstellt.
Platz:Der Hyperlink-Login ist sichtbar. GitHub-Adresse:Der Hyperlink-Login ist sichtbar.
Jieba.NET
Jieba.NET ist ein Partizip chinesisch jieba. .NET-Version (C#-Implementierung). Es kann Funktionen wie Wortsegmentierung, Wortartannotation, Schlüsselwortextraktion usw. für chinesischen Text ausführen und unterstützt benutzerdefinierte Wörterbücher.
GitHub-Adresse:Der Hyperlink-Login ist sichtbar.
Schauen wir uns zunächst die Renderings an:
Anpassen Sie den Analysator
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream in Lucene TokenStream: Ein Stream, der nach der Verarbeitung des Tokenizers erhalten wird. Dieser Strom speichert verschiedene Informationen zur Wortsegmentierung, die effektiv über TokenStream erhalten werden können. Im Folgenden wird der Dateistrom in einen TokenStream umgewandelt: Zuerst verwendet man den Tokenizer, um die Wörter zu segmentieren, verschiedene Tokenizer haben unterschiedliche Tokenizer; nachdem der Tokenizer getrennt wurde, filtert man die in Worte aufgeteilten Daten durch den TokenFilter, wie zum Beispiel Stopwörter. Nach dem Filtern werden alle Daten zu einem TokenStream zusammengefasst.
Referenz:
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Um den Lucene-Analysator basierend auf Jieba.NET anzupassen, lautet die erste Referenz wie folgt:
Beziehen Sie sich direkt auf das Lucene.Net.Analysis.Common-Paket, da Lucene.Net.Analysis.Common darauf angewiesen ist, dass das Lucene.Net-Paket automatisch heruntergeladen wird.
Erstellen Sie ein neues JiebaTokenizer.cs mit folgendem Code:
Erstellen Sie ein neues JiebaAnalyzer.cs mit folgendem Code:
Lucene.Net Erstellen Sie neue Dokumente und Suchanfragen
Fügen Sie regelmäßig oder getriggert Daten von einer Website zu Lucene hinzu, und Lucene speichert das Dokument auf einer physischen Festplatte über den Analyzer und ruft dann die Suchoberfläche auf, um es zu finden.
Der LuceneHelper-Hilfeklassencode ist wie folgt:
Lagerlagerung
Store.YES: Es wird nicht nur die Daten indizieren, sondern auch gespeichert, sodass die Suchergebnisse Feldinformationen zurückgeben können. Store.NO: Nur die Daten werden indexiert, die Daten werden nicht gespeichert, und die Suchergebnisse können diese Feldinformationen nicht erhalten.Spart Festplattenspeicher;
Wie unten gezeigt:
Feldfeldtyp
Die Feldtypen in Lucene.Net sind Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Bitte verwenden Sie den passenden Datentyp entsprechend Ihrer Situation.
TextField vs. StringField
TextField wird definitiv lexikalisiert, StringField wird keine lexikalische Analyse der im Dokument gespeicherten Inhalte durchführen, siehe Folgendes:Der Hyperlink-Login ist sichtbar.
Auftretende zusammengesetzte Suche
Es gibt 6 Kombinationen der folgenden Varianten:
1. MUST und MUST: Erhalten Sie die Schnittmenge aufeinanderfolgender Abfrageklauseln. 2. MUST und MUST_NOT: Gibt an, dass die Suchergebnisse der Abfrageklausel, die dem MUST_NOT entspricht, nicht in die Abfrageergebnisse aufgenommen werden können. 3.SHOULD und MUST_NOT: Bei kontinuierlicher Anwendung ist die Funktion identisch mit MUST und MUST_NOT. 4. Wenn SHOULD und MUST zusammen verwendet werden, ist das Ergebnis das Suchergebnis der MUST-Klausel, aber SHOULD kann die Sortierung beeinflussen. 5. SOLLTE und SOLLTE: Zeigt die Beziehung zwischen "oder" an, und das endgültige Suchergebnis ist die Vereinigung aller Suchklauseln. 6.MUST_NOT und MUST_NOT: bedeutungslos, Abruf ohne Ergebnis.
Führe das Projekt durch
An diesem Punkt können Sie das Projekt starten, um den Interface-Code wie folgt hinzuzufügen, zu aktualisieren und danach zu suchen:
Fehler können wie folgt gemeldet werden:
Während der Bearbeitung der Anfrage trat eine unbehandelte Ausnahme auf.
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, Dateimodus, Dateizugriffszugriff, Dateifreigabe, Dateifreigabe, Dateioptionen)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Nach der Installation kann man das Resources jieba.NET-Verzeichnis im packages\-Verzeichnis sehen, das das Wörterbuch und andere Datendateien enthält, die zum Ausführen jieba.NET benötigt werden, und die einfachste Konfigurationsmethode ist, das gesamte Resources-Verzeichnis in das Verzeichnis zu kopieren, in dem sich die Assembly befindet, sodass die eingebauten Standardkonfigurationswerte jieba.NET verwendet werden.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet muss einen Konfigurationsordner hinzufügen, der Code ist wie folgt:
Der Test erstellte 500 neue Dokumente (bezogen auf meine tatsächliche Situation, nur zur Referenz), und die Festplatte nimmt 119KB ein, wie in der untenstehenden Abbildung gezeigt:
(Ende)
|