Požiadavky: Fulltextové vyhľadávanie na stránke je bežne používaná funkcia a je na jej základe bežne využívanéElasticSearch、SolrNasadenie a vývoj, a teraz boli vydané dve nové verzieRedisSearch、MeiliSearchVyhľadávače, prvé dve sú ťažšie, hoci posledné dve nie sú také náročné ako prvé dve, ale stále musia nasadiť závislé služby, tento článok používa Lucene.Net + Jieba.NET na vytvorenie ľahkého vyhľadávania na stránke.
Lucene.Net
Lucene.Net je .NET port Lucene a je open-source vývojová sada fulltextového vyhľadávača, t. j. nie je to fulltextový vyhľadávač, ale fulltextová vyhľadávacia architektúra, ktorá poskytuje kompletný dotazovací a indexovací engine.
Stavenisko:Prihlásenie na hypertextový odkaz je viditeľné. GitHub adresa:Prihlásenie na hypertextový odkaz je viditeľné.
Jieba.NET
Jieba.NET je príčastie čínskeho jieba. .NET verzia (implementácia v C#). Dokáže vykonávať funkcie ako segmentácia slov, anotácia slovných druhov, extrakcia kľúčových slov a podobne pre čínsky text a podporuje vlastné slovníky.
GitHub adresa:Prihlásenie na hypertextový odkaz je viditeľné.
Najprv sa pozrime na vizualizácie:
Prispôsobiť analyzátor
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream v Lucene TokenStream: Stream získaný po spracovaní tokenizéra. Tento stream uchováva rôzne informácie o segmentácii slov, ktoré je možné efektívne získať cez TokenStream. Nasleduje proces konverzie súborového toku na TokenStream. Najprv použite Tokenizer na segmentáciu slov, rôzne tokenizéry majú rôzne tokenziery, po oddelení tokenzieru filtrujte dáta rozdelené na slová cez TokenFilter, napríklad stopové slová. Po filtrovaní skombinujte všetky dáta do TokenStreamu.
Referencia:
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Na prispôsobenie analyzátora Lucene na základe Jieba.NET je prvá referencia nasledovná:
Pozrite sa priamo na balík Lucene.Net.Analysis.Common, pretože Lucene.Net.Analysis.Common sa spolieha na automatické sťahovanie Lucene.Net balíka.
Vytvorte nový JiebaTokenizer.cs s nasledujúcim kódom:
Vytvorte nový JiebaAnalyzer.cs s nasledujúcim kódom:
Lucene.Net Vytváranie nových dokumentov a vyhľadávania
Pridajte dáta z webovej stránky do Lucene pravidelne alebo spúšťane, a Lucene uloží dokument na fyzický disk cez analyzátor a potom zavolá vyhľadávacie rozhranie, aby ho našiel.
Kód pomocnej triedy LuceneHelper je nasledovný:
Skladovanie v obchode
Store.YES: Nielenže indexuje dáta, ale aj uloží údaje, takže výsledky vyhľadávania môžu vrátiť informácie o poliach. Store.NO: Indexované budú iba údaje, údaje sa neuložia a výsledky vyhľadávania nemôžu získať informácie o tomto poli.Šetrí miesto na disku;
Ako je uvedené nižšie:
Typ poľa
Typy polí v Lucene.Net sú Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Prosím, použite vhodný typ údajov podľa vašej situácie.
TextField vs. StringField
TextField bude určite lexikalizovaný, StringField nebude vykonávať lexikálnu analýzu obsahu uloženého v dokumente, pozri:Prihlásenie na hypertextový odkaz je viditeľné.
Prebehnite komplexné vyhľadávanie
Existuje 6 kombinácií nasledujúcich:
1. MUSÍ a MUSÍ: Získajte prienik po sebe idúcich dopytových klauzúl. 2. MUSÍ a MUST_NOT: Označuje, že výsledky vyhľadávania dotazovej klauzuly zodpovedajúcej MUST_NOT nemôžu byť zahrnuté vo výsledkoch dotazu. 3. SHOULD a MUST_NOT: Pri nepretržitom použití je funkcia rovnaká ako MUSÍ a MUST_NOT. 4. Keď sa SHOULD a MUST používajú spolu, výsledkom je výsledok vyhľadávania klauzuly MUST, ale SHOULD môže ovplyvniť triedenie. 5. MAL by a MAL BY: Označuje vzťah medzi "alebo" a konečný výsledok vyhľadávania je zjednotením všetkých vyhľadávacích klauzúl. 6.MUST_NOT a MUST_NOT: bezvýznamné, získanie bez výsledkov.
Spustite projekt
V tomto bode môžete začať projekt na pridávanie, aktualizáciu a vyhľadávanie kódu rozhrania nasledovne:
Chyby môžu byť hlásené nasledovne:
Počas spracovania požiadavky došlo k nespracovanej výnimke.
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 options)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Po inštalácii môžete vidieť adresár Resources v adresári packages\jieba.NET, ktorý obsahuje slovník a ďalšie dátové súbory potrebné na spustenie jieba.NET, a najjednoduchšou metódou konfigurácie je skopírovať celý adresár Resources do adresára, kde sa assembler nachádza, aby sa jieba.NET použili vstavané predvolené konfiguračné hodnoty.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet potrebuje pridať konfiguračný priečinok, kód je nasledovný:
Test vytvoril 500 nových dokumentov (súvisiacich s mojou skutočnou situáciou, len pre referenciu) a disk zaberá 119KB, ako je znázornené na obrázku nižšie:
(Koniec)
|