Cerințe: Căutarea full-text pe site este o funcție frecvent folosită și este folosită frecvent pe baza acesteiaElasticSearch、SolrImplementare și dezvoltare, iar acum două noi au fost lansateRedisSearch、MeiliSearchPrimele două sunt mai grele, deși ultimele două nu sunt la fel de grele ca primele două, dar tot trebuie să implementeze servicii dependente; acest articol folosește Lucene.Net + Jieba.NET pentru a construi o căutare ușoară la fața locului.
Lucene.Net
Lucene.Net este un port .NET al Lucene și este un kit open-source de dezvoltare pentru motoare de căutare full-text, adică nu este un motor de căutare full-text, ci o arhitectură de motor de căutare full-text care oferă un motor de interogare complet și un motor de indexare.
Site:Autentificarea cu hyperlink este vizibilă. Adresă GitHub:Autentificarea cu hyperlink este vizibilă.
Jieba.NET
Jieba.NET este un participiu chinezesc jieba. versiunea .NET (implementare C#). Poate efectua funcții precum segmentarea cuvintelor, adnotarea părților de vorbire, extragerea cuvintelor cheie etc. pentru textul chinezesc și suportă dicționare personalizate.
Adresă GitHub:Autentificarea cu hyperlink este vizibilă.
Mai întâi, să aruncăm o privire asupra randărilor:
Personalizează analizorul
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream in Lucene TokenStream: Un flux obținut după ce tokenizerul a fost procesat. Acest flux stochează diverse informații despre segmentarea cuvintelor, care pot fi obținute eficient prin TokenStream. Următorul este procesul de conversie a fluxului de fișiere într-un TokenStream. Mai întâi, folosiți Tokenizer-ul pentru a segmenta cuvintele, diferiți tokenizatori au tokenzieri diferiți, după ce tokenzierul este separat, filtrați datele care au fost împărțite în cuvinte prin TokenFilter, cum ar fi cuvintele de oprire. După filtrare, combină toate datele într-un TokenStream.
Referință:
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Pentru a personaliza analizorul Lucene pe baza Jieba.NET, prima referință este următoarea:
Consultă direct pachetul Lucene.Net.Analysis.Common, deoarece Lucene.Net.Analysis.Common se bazează pe pachetul Lucene.Net pentru a se descărca automat.
Creează un nou JiebaTokenizer.cs cu următorul cod:
Creează un nou JiebaAnalyzer.cs cu următorul cod:
Lucene.Net Creează documente și căutări noi
Adaugă date de pe un site web în Lucene în mod regulat sau declanșat, iar Lucene stochează documentul pe un disc fizic prin analizator, apoi apelează interfața de căutare pentru a-l găsi.
Codul clasei de ajutor LuceneHelper este următorul:
Stocarea stocării
Store.YES: Nu doar că va indexa datele, dar le va și salva, astfel încât rezultatele căutării să poată returna informații despre câmpuri. Store.NO: Doar datele vor fi indexate, datele nu vor fi salvate, iar rezultatele căutării nu pot obține aceste informații de câmp.Economisește spațiu pe disc;
Așa cum se arată mai jos:
Tipul câmpului
Tipurile de câmpuri din Lucene.Net sunt Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Vă rugăm să folosiți tipul de date corespunzător în funcție de situația dumneavoastră.
TextField vs. StringField
TextField va fi cu siguranță lexicalizat, StringField nu va efectua analize lexicale a conținutului stocat în document, consultați:Autentificarea cu hyperlink este vizibilă.
Căutare compusă care apare
Există 6 combinații ale următoarelor:
1. MUST și MUST: Obțineți intersecția clauzelor consecutive de interogare. 2. MUST și MUST_NOT: Indică faptul că rezultatele căutării clauzei de interogare corespunzătoare MUST_NOT nu pot fi incluse în rezultatele interogării. 3. SHOULD și MUST_NOT: Când este folosită continuu, funcția este aceeași cu MUST și MUST_NOT. 4. Când SHOULD și MUST sunt folosite împreună, rezultatul este rezultatul căutării clauzei MUST, dar SHOULD poate influența sortarea. 5. SHOULD și SHOULD: Indică relația dintre "sau", iar rezultatul final al căutării este uniunea tuturor clauzelor de căutare. 6.MUST_NOT și MUST_NOT: fără sens, recuperare fără rezultate.
Condu proiectul
În acest moment, poți începe proiectul pentru a adăuga, actualiza și căuta codul interfeței astfel:
Erorile pot fi raportate după cum urmează:
O excepție negestionată a avut loc în timpul procesării cererii.
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(stringuri fullPath, mod FileMode, acces FileAccess, share FileShare, opțiuni FileOptions)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net După instalare, poți vedea directorul Resurse în folderul package\jieba.NET, care conține dicționarul și alte fișiere de date necesare pentru rularea jieba.NET, iar cea mai simplă metodă de configurare este să copiezi întregul director Resurse în directorul unde se află asamblarea, astfel încât valorile implicite de configurație încorporate să fie folosite jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet trebuie să adauge un folder de configurare, codul este următorul:
Testul a creat 500 de documente noi (legate de situația mea reală, doar pentru referință), iar discul ocupă 119KB, așa cum se vede în figura de mai jos:
(Sfârșit)
|