Reikalavimai: Viso teksto paieška svetainėje yra dažniausiai naudojama funkcija ir dažniausiai naudojama pagal jąElastinė paieška、SolrDiegimas ir plėtra, o dabar buvo išleisti du naujiIeškoti iš naujo、MeiliSearchPaieškos sistema, pirmieji du yra sunkesni, nors paskutiniai du nėra tokie sunkūs kaip pirmieji du, tačiau vis tiek reikia diegti priklausomas paslaugas, šiame straipsnyje naudojama Lucene.Net + Jieba.NET, kad būtų sukurta lengva paieška vietoje.
Lucene.Net
Lucene.Net yra "Lucene" .NET prievadas ir yra atvirojo kodo viso teksto paieškos sistemų kūrimo rinkinys, t. y. tai nėra viso teksto paieškos sistema, o viso teksto paieškos sistemos architektūra, teikianti visą užklausų variklį ir indeksavimo variklį.
Svetainė:Hipersaito prisijungimas matomas. "GitHub" adresas:Hipersaito prisijungimas matomas.
Jieba.NET
Jieba.NET yra dalyvis kinų jieba. .NET versija (C# diegimas). Jis gali atlikti tokias funkcijas kaip žodžių segmentavimas, kalbos dalies anotacija, raktinių žodžių ištraukimas ir kt. kinų tekstui ir palaiko pasirinktinius žodynus.
"GitHub" adresas:Hipersaito prisijungimas matomas.
Pirmiausia pažvelkime į atvaizdus:
Tinkinkite analizatorių
Analizatorius, TokenStream, Tokenizer, TokenFilterTokenStream Lucene TokenStream: srautas, gaunamas apdorojus tokenizatorių. Šiame sraute saugoma įvairi informacija apie žodžių segmentavimą, kurią galima efektyviai gauti naudojant TokenStream. Toliau pateikiamas failų srauto konvertavimo į "TokenStream" procesas Pirmiausia naudokite "Tokenizer", kad segmentuotumėte žodžius, skirtingi tokenizatoriai turi skirtingus žetonus, atskyrę žetoną, filtruokite duomenis, kurie buvo suskirstyti į žodžius per "TokenFilter", pvz., stabdymo žodžius. Po filtravimo sujunkite visus duomenis į TokenStream.
Nuoroda:
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Norėdami pritaikyti "Lucene" analizatorių pagal Jieba.NET, pirmoji nuoroda yra tokia:
Kreipkitės tiesiai į Lucene.Net.Analysis.Common paketą, nes Lucene.Net.Analysis.Common automatiškai atsisiunčiamas nuo Lucene.Net paketo.
Sukurkite naują JiebaTokenizer.cs naudodami šį kodą:
Sukurkite naują JiebaAnalyzer.cs naudodami šį kodą:
Lucene.Net Kurti naujus dokumentus ir ieškoti
Reguliariai arba suaktyvinus įtraukite duomenis iš svetainės į Lucene, o Lucene išsaugo dokumentą fiziniame diske per analizatorių, o tada iškviečia paieškos sąsają, kad jį rastų.
LuceneHelper pagalbos klasės kodas yra toks:
Parduotuvės saugykla
Store.YES: Jis ne tik indeksuos duomenis, bet ir išsaugos duomenis, kad paieškos rezultatai galėtų grąžinti lauko informaciją. Store.NO: Bus indeksuojami tik duomenys, duomenys nebus įrašyti, o ieškos rezultatai negalės gauti šios lauko informacijos.Taupo vietą diske;
Kaip parodyta žemiau:
Lauko lauko tipas
Lucene.Net laukų tipai yra Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Naudokite atitinkamą duomenų tipą pagal savo situaciją.
TextField ir StringField
TextField tikrai bus leksikalizuotas, StringField neatliks doc saugomo turinio leksinės analizės, žr.:Hipersaito prisijungimas matomas.
Įvyksta sudėtinė paieška
Yra 6 šių derinių:
1. TURI ir PRIVALO: gaukite nuoseklių užklausų sąlygų sankirtą. 2. MUST ir MUST_NOT: nurodo, kad užklausos sąlygos, atitinkančios MUST_NOT, paieškos rezultatų negalima įtraukti į užklausos rezultatus. 3.SHOULD ir MUST_NOT: Naudojant nuolat, funkcija yra tokia pati kaip MUST ir MUST_NOT. 4. Kai SHOULD ir MUST naudojami kartu, gaunamas sąlygos MUST paieškos rezultatas, tačiau SHOULD gali turėti įtakos rūšiavimui. 5. TURĖTŲ ir TURĖTŲ: nurodo ryšį tarp "arba", o galutinis paieškos rezultatas yra visų paieškos sąlygų sąjunga. 6.MUST_NOT ir MUST_NOT: beprasmis, susigrąžinimas be rezultatų.
Vykdyti projektą
Šiuo metu galite pradėti projektą, kad pridėtumėte, atnaujintumėte ir ieškotumėte sąsajos kodo taip:
Apie klaidas galima pranešti taip:
Apdorojant užklausą įvyko neapdorota išimtis.
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(eilutė fullPath, FileMode režimas, FileAccess prieiga, FileShare bendrinimas, FileOptions parinktys)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Įdiegę katalogą Ištekliai galite pamatyti katalogą paketai\jieba.NET kuriame yra žodynas ir kiti duomenų failai, reikalingi jieba.NET paleisti, o paprasčiausias konfigūravimo būdas yra nukopijuoti visą išteklių katalogą į katalogą, kuriame yra rinkinys, kad įtaisytosios numatytosios konfigūracijos reikšmės būtų naudojamos jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources "JiebaNet" reikia pridėti konfigūracijos aplanką, kodas yra toks:
Testas sukūrė 500 naujų dokumentų (susijusių su mano faktine situacija, tik nuoroda), o diskas užima 119 KB, kaip parodyta paveikslėlyje žemiau:
(Pabaiga)
|