Zahteve: Iskanje po celotnem besedilu na strani je pogosto uporabljena funkcija in se pogosto uporablja prav na podlagi tegaElasticSearch、SolrUvedba in razvoj, zdaj pa sta bila izdana še dva novaRedisSearch、MeiliSearchPrvi dve sta težji, čeprav zadnji dve nista tako zahtevni kot prvi dve, vendar vseeno zahtevata uporabo odvisnih storitev, ta članek uporablja Lucene.Net + Jieba.NET za izdelavo lahkotnega iskanja na spletni strani.
Lucene.Net
Lucene.Net je .NET prenos Lucene in je odprtokodni razvojni komplet za polno besedilo iskalnika, torej ni polnobesedilni iskalnik, temveč arhitektura iskalnika s polnim besedilom, ki zagotavlja popoln poizvedbeni in indeksni mehanizem.
Stran:Prijava do hiperpovezave je vidna. GitHub naslov:Prijava do hiperpovezave je vidna.
Jieba.NET
Jieba.NET je deležnik kitajske jieba. .NET različica (C# implementacija). Lahko izvaja funkcije, kot so segmentacija besed, označevanje delov govora, izvlečenje ključnih besed itd. za kitajsko besedilo ter podpira prilagojene slovarje.
GitHub naslov:Prijava do hiperpovezave je vidna.
Najprej si poglejmo upodobitve:
Prilagodite analizator
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream v Lucene TokenStream: Tok, pridobljen po obdelavi tokenizerja. Ta tok hrani različne informacije o segmentaciji besed, ki jih je mogoče učinkovito pridobiti preko TokenStreama. Naslednji je postopek pretvorbe datotečnega toka v TokenStream. Najprej uporabite Tokenizer za segmentacijo besed, različni tokenizerji imajo različne tokenzierje, po ločevanju tokenzierja filtrirajte podatke, razdeljene na besede, preko TokenFilterja, kot so stop besede. Po filtriranju združite vse podatke v TokenStream.
Referenčni:
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Za prilagoditev analizatorja Lucene na podlagi Jieba.NET je prva referenca naslednja:
Neposredno se obrnite na paket Lucene.Net.Analysis.Common, saj se Lucene.Net.Analysis.Common zanaša na Lucene.Net paket za samodejni prenos.
Ustvarite nov JiebaTokenizer.cs z naslednjo kodo:
Ustvarite nov JiebaAnalyzer.cs z naslednjo kodo:
Lucene.Net Ustvarjanje novih dokumentov in iskanj
Če podatke s spletne strani redno ali sproženo dodate v Lucen, dokument shrani na fizični disk preko analizatorja in nato pokliče iskalni vmesnik, da ga najde.
Koda razreda pomoči LuceneHelper je naslednja:
Shranjevanje v trgovini
Store.YES: Ne bo le indeksiral podatke, ampak jih tudi shranil, tako da bodo rezultati iskanja lahko vrnili informacije o polju. Store.NO: Indeksirani bodo le podatki, podatki ne bodo shranjeni, rezultati iskanja pa ne morejo pridobiti informacij o tem polju.Prihrani prostor na disku;
Kot je prikazano spodaj:
Vrsta polja
Vrste polj v Lucene.Net so Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Prosimo, uporabite ustrezen podatkovni tip glede na vašo situacijo.
TextField proti StringField
TextField bo zagotovo leksikaliziran, StringField ne bo izvajal leksikalne analize vsebine, shranjene v dokumentarcu, glej:Prijava do hiperpovezave je vidna.
Izvedba sestavljenega iskanja
Obstaja 6 kombinacij naslednjega:
1. MORA in MORA: Pridobite presečišče zaporednih poizvedbenih klavzul. 2. MUST in MUST_NOT: Označuje, da iskalnih rezultatov poizvedbene klavzule, ki ustreza MUST_NOT, ni mogoče vključiti v rezultate poizvedbe. 3. NAJ in MUST_NOT: Ko se funkcija uporablja neprekinjeno, je enaka kot MORA in MUST_NOT. 4. Ko se SHOULD in MUST uporabljata skupaj, je rezultat iskalni rezultat klavzule MUST, vendar lahko SHOULD vpliva na razvrščanje. 5. NAJ in MORA: Označuje razmerje med "ali", končni rezultat iskanja pa je združitev vseh iskalnih klavzul. 6.MUST_NOT in MUST_NOT: brez pomena, pridobivanje brez rezultatov.
Vodite projekt
Na tej točki lahko začnete projekt za dodajanje, posodabljanje in iskanje vmesniške kode na naslednji način:
Napake se lahko prijavijo na naslednji način:
Med obdelavo zahteve je prišlo do neobdelane izjeme.
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(niz fullPath, FileMode mode, dostop do datotek, FileShare share, možnosti FileOptions)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Po namestitvi lahko v mapi paketi\jieba.NET vidite mapo Resources, ki vsebuje slovar in druge podatkovne datoteke, potrebne za zagon jieba.NET, najlažja metoda konfiguracije pa je, da celotno mapo Resources kopirate v mapo, kjer se nahaja sestav, tako da se vgrajene privzete nastavitve uporabljajo jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet mora dodati konfiguracijsko mapo, koda je naslednja:
Test je ustvaril 500 novih dokumentov (povezanih z mojo dejansko situacijo, samo za referenco), disk pa zavzema 119KB, kot je prikazano na spodnji sliki:
(Konec)
|