Krav: Fulltekstsøk på nettstedet er en mye brukt funksjon, og den brukes ofte basert på detteElasticSearch、SolrUtrulling og utvikling, og nå har to nye blitt lansertRedisSearch、MeiliSearchSøkemotor, de to første er tyngre, selv om de to siste ikke er like tunge som de to første, men krever fortsatt utrulling av avhengige tjenester. Denne artikkelen bruker Lucene.Net + Jieba.NET for å bygge et lett søk på stedet.
Lucene.Net
Lucene.Net er en .NET-port av Lucene og er et åpen kildekode-utviklingssett for fulltekstsøkemotorer, det vil si det er ikke en fulltekst-søkemotor, men en fulltekst-søkemotorarkitektur som tilbyr en komplett spørringsmotor og indekseringsmotor.
Tomt:Innloggingen med hyperkoblingen er synlig. GitHub-adresse:Innloggingen med hyperkoblingen er synlig.
Jieba.NET
Jieba.NET er et partisipp på kinesisk jieba. .NET-versjon (C#-implementering). Den kan utføre funksjoner som ordsegmentering, ordklasseannotasjon, nøkkelorduttrekking osv. for kinesisk tekst, og støtter tilpassede ordbøker.
GitHub-adresse:Innloggingen med hyperkoblingen er synlig.
La oss først se på visualiseringene:
Tilpass analysatoren
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream i Lucene TokenStream: En strøm som oppnås etter at tokenizeren er behandlet. Denne strømmen lagrer ulike opplysninger om ordsegmentering, som effektivt kan oppnås gjennom TokenStream. Følgende er prosessen med å konvertere filstrømmen til en TokenStream. Først bruker du Tokenizeren til å segmentere ordene, forskjellige tokenizere har forskjellige tokenizere, og etter at tokenizeren er separert, filtrerer du dataene som er delt opp i ord gjennom TokenFilter, som stoppord. Etter filtrering, kombiner all data i en TokenStream.
Referanse:
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
For å tilpasse Lucene-analysatoren basert på Jieba.NET, er den første referansen som følger:
Se direkte til Lucene.Net.Analysis.Common-pakken, da Lucene.Net.Analysis.Common er avhengig av at Lucene.Net-pakken lastes ned automatisk.
Opprett en ny JiebaTokenizer.cs med følgende kode:
Opprett en ny JiebaAnalyzer.cs med følgende kode:
Lucene.Net Opprett nye dokumenter og søk
Legg til data fra et nettsted til Lucene regelmessig eller utløst, og Lucene lagrer dokumentet på en fysisk disk gjennom analysatoren, og kaller deretter søkegrensesnittet for å finne det.
LuceneHelper-koden for hjelpeklassen er som følger:
Lagerlagring
Store.YES: Det vil ikke bare indeksere dataene, men også lagre dataene, slik at søkeresultatene kan returnere feltinformasjon. Store.NO: Kun dataene vil bli indeksert, og dataene vil ikke bli lagret, og søkeresultatene kan ikke hente denne feltinformasjonen.Sparer diskplass;
Som vist nedenfor:
Felttype
Felttypene i Lucene.Net er Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Vennligst bruk riktig datatype i henhold til din situasjon.
TextField vs. StringField
TextField vil definitivt bli leksikalisert, StringField vil ikke utføre leksikalsk analyse av innholdet lagret i dokumentet, se til:Innloggingen med hyperkoblingen er synlig.
Forekommende sammensatt søk
Det finnes 6 kombinasjoner av følgende:
1. MÅ og MÅ: Få skjæringspunktet mellom påfølgende spørringsklausuler. 2. MUST og MUST_NOT: Indikerer at søkeresultatene til spørringsklausulen som tilsvarer MUST_NOT ikke kan inkluderes i søkeresultatene. 3.SHOULD og MUST_NOT: Når funksjonen brukes kontinuerlig, er funksjonen den samme som MUST og MUST_NOT. 4. Når SHOULD og MUST brukes sammen, er resultatet søkeresultatet til MUST-klausulen, men SHOULD kan påvirke sorteringen. 5. SHOULD og SHOULD: Indikerer forholdet mellom "eller", og det endelige søkeresultatet er sammenslåingen av alle søkeklausuler. 6.MUST_NOT og MUST_NOT: meningsløs, henting uten resultater.
Kjør prosjektet
På dette tidspunktet kan du starte prosjektet for å legge til, oppdatere og søke etter grensesnittkoden som følger:
Feil kan rapporteres som følger:
Et unntak som ikke ble håndtert, oppsto under behandlingen av forespørselen.
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(streng fullPath, FileMode-modus, FileAccess-tilgang, FileShare share, FileOptions-alternativer)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Etter installasjon kan du se Resources jieba.NET-katalogen i packages\-mappen, som inneholder ordboken og andre datafiler som kreves for å kjøre jieba.NET, og den enkleste konfigurasjonsmetoden er å kopiere hele Resources-mappen til mappen der assembleren befinner seg, slik at de innebygde standardkonfigurasjonsverdiene brukes jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet må legge til en konfigurasjonsmappe, koden er som følger:
Testen skapte 500 nye dokumenter (relatert til min faktiske situasjon, kun til referanse), og disken opptar 119KB, som vist i figuren nedenfor:
(Slutt)
|