Krav: Fuldtekstsøgning på siden er en almindeligt anvendt funktion, og den anvendes ofte baseret på denElasticSearch、SolrUdrulning og udvikling, og nu er to nye blevet udgivetRedisSearch、MeiliSearchSøgemaskine, de to første er tungere, selvom de to sidste ikke er så tunge som de to første, men stadig kræver implementering af afhængige tjenester; denne artikel bruger Lucene.Net + Jieba.NET til at bygge en letvægts onsite-søgning.
Lucene.Net
Lucene.Net er en .NET-port af Lucene og er et open source fuldtekst-søgemaskineudviklingssæt, dvs. det er ikke en fuldtekst-søgemaskine, men en fuldtekst-søgemaskinearkitektur, der leverer en komplet forespørgsels- og indekseringsmotor.
Websted:Hyperlink-login er synlig. GitHub-adresse:Hyperlink-login er synlig.
Jieba.NET
Jieba.NET er et participium kinesisk jieba. .NET-version (C#-implementering). Den kan udføre funktioner som ordsegmentering, ordklasseannotation, nøgleordsudtrækning osv. for kinesisk tekst og understøtter brugerdefinerede ordbøger.
GitHub-adresse:Hyperlink-login er synlig.
Lad os først se på renderingerne:
Tilpas analysatoren
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream i Lucene TokenStream: En strøm, der opnås efter tokenizeren er blevet behandlet. Denne strøm gemmer forskellige oplysninger om ordsegmentering, som effektivt kan opnås via TokenStream. Følgende er processen med at konvertere filstrømmen til en TokenStream. Først bruger du Tokenizeren til at segmentere ordene, forskellige tokenizere har forskellige tokenizere, og efter tokenizeren er adskilt, filtreres de data, der er opdelt i ord, gennem TokenFilteret, såsom stopord. Efter filtrering samles alle data i en TokenStream.
Henvisning:
Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hyperlink-login er synlig.
For at tilpasse Lucene-analysatoren baseret på Jieba.NET er den første reference som følger:
Se direkte til Lucene.Net.Analysis.Common-pakken, da Lucene.Net.Analysis.Common er afhængig af, at Lucene.Net-pakken downloades automatisk.
Opret en ny JiebaTokenizer.cs med følgende kode:
Opret en ny JiebaAnalyzer.cs med følgende kode:
Lucene.Net Opret nye dokumenter og søgninger
Tilføj data fra en hjemmeside til Lucene regelmæssigt eller med trigger, og Lucene gemmer dokumentet på en fysisk disk via analysatoren og kalder derefter søgegrænsefladen for at finde det.
LuceneHelper-hjælpeklassens kode er som følger:
Opbevaring i butikken
Store.YES: Det indekserer ikke kun dataene, men gemmer også dataene, så søgeresultaterne kan returnere feltinformation. Store.NO: Kun dataene vil blive indekseret, og dataene vil ikke blive gemt, og søgeresultaterne kan ikke få fat i disse feltoplysninger.Sparer diskplads;
Som vist nedenfor:
Felttype
Felttyperne i Lucene.Net er Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Brug venligst den relevante datatype i henhold til din situation.
TextField vs. StringField
TextField vil helt sikkert blive leksikaliseret, StringField vil ikke udføre leksikalsk analyse af det indhold, der er gemt i dokumentet, henvis:Hyperlink-login er synlig.
Forekommer sammensat søgning
Der er 6 kombinationer af følgende:
1. MUST og MUST: Få krydset mellem sammenhængende forespørgselsklausuler. 2. MUST og MUST_NOT: Angiver, at søgeresultaterne af forespørgselsklausulen, der svarer til MUST_NOT, ikke kan inkluderes i forespørgselsresultaterne. 3.SHOULD og MUST_NOT: Når funktionen bruges kontinuerligt, er den samme som MUST og MUST_NOT. 4. Når SHOULD og MUST bruges sammen, er resultatet søgeresultatet for MUST-klausulen, men SHOULD kan påvirke sorteringen. 5. BØR og BURDE: Angiver forholdet mellem "eller", og det endelige søgeresultat er foreningen af alle søgeklausuler. 6.MUST_NOT og MUST_NOT: meningsløs, genfinding uden resultater.
Kør projektet
På dette tidspunkt kan du starte projektet for at tilføje, opdatere og søge efter interfacekoden som følger:
Fejl kan rapporteres som følger:
En ubehandlet undtagelse opstod under behandlingen af anmodningen.
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 mode, FileAccess adgang, FileShare share, FileOptions-muligheder)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Efter installationen kan du se Resources-mappen i packages\jieba.NET-mappen, som indeholder ordbogen og andre datafiler, der kræves for at køre jieba.NET, og den nemmeste konfigurationsmetode er at kopiere hele Resources-mappen til den mappe, hvor assemblyen er placeret, så de indbyggede standardkonfigurationsværdier kan bruges jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet skal tilføje en konfigurationsmappe, koden er som følger:
Testen skabte 500 nye dokumenter (relateret til min faktiske situation, kun til reference), og disken optager 119KB, som vist i figuren nedenfor:
(Slut)
|