Krav: Fulltextsökning på sidan är en vanligt använd funktion och används ofta baserat på denElasticSearch、SolrUtrullning och utveckling, och nu har två nya släpptsRedisSearch、MeiliSearchSökmotor, de två första är tyngre, även om de två sista inte är lika tunga som de två första, men de kräver ändå att beroende tjänster implementeras, denna artikel använder Lucene.Net + Jieba.NET för att bygga en lättviktig sökning på plats.
Lucene.Net
Lucene.Net är en .NET-portering av Lucene och är ett öppen källkods-utvecklingskit för fulltextsökmotorer, det vill säga det är inte en fulltext-sökmotor, utan en fulltext-sökmotorarkitektur som tillhandahåller en komplett frågemotor och indexeringsmotor.
Plats:Inloggningen med hyperlänken är synlig. GitHub-adress:Inloggningen med hyperlänken är synlig.
Jieba.NET
Jieba.NET är ett particip på kinesiska jieba. .NET-version (C#-implementation). Den kan utföra funktioner som ordsegmentering, ordklassannotering, nyckelordsextraktion med mera för kinesisk text, och stöder anpassade ordböcker.
GitHub-adress:Inloggningen med hyperlänken är synlig.
Först, låt oss titta på renderingarna:
Anpassa analysatorn
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream i Lucene TokenStream: En ström som erhålls efter att tokenizern har behandlats. Denna ström lagrar olika uppgifter om ordsegmentering, som effektivt kan erhållas via TokenStream. Följande är processen att konvertera filströmmen till en TokenStream. Först använder man Tokenizern för att segmentera orden, olika tokenizers har olika tokenizers, efter att tokenizern separerats filtreras data som har delats upp i ord genom TokenFilter, såsom stoppord. Efter filtrering, kombinera all data till en TokenStream.
Hänvisning:
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
För att anpassa Lucene-analysatorn baserat på Jieba.NET är den första referensen följande:
Se direkt till paketet Lucene.Net.Analysis.Common, eftersom Lucene.Net.Analysis.Common förlitar sig på att Lucene.Net-paketet laddas ner automatiskt.
Skapa en ny JiebaTokenizer.cs med följande kod:
Skapa en ny JiebaAnalyzer.cs med följande kod:
Lucene.Net Skapa nya dokument och sökningar
Lägger till data från en webbplats till Lucene regelbundet eller med trigger, och Lucene lagrar dokumentet på en fysisk disk via analysatorn och anropar sedan sökgränssnittet för att hitta det.
LuceneHelpers hjälpklasskod är som följer:
Förvaring i butik
Store.YES: Den kommer inte bara att indexera datan, utan även spara den, så att sökresultaten kan returnera fältinformation. Store.NO: Endast data kommer att indexeras, och datan kommer inte att sparas, och sökresultaten kan inte få fram denna fältinformation.Sparar diskutrymme;
Som visas nedan:
Fälttyp
Fälttyperna i Lucene.Net är Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Vänligen använd rätt datatyp enligt din situation.
TextField vs. StringField
TextField kommer definitivt att vara lexikaliserad, StringField kommer inte att utföra lexikal analys av innehållet som lagras i dokumentet, se till:Inloggningen med hyperlänken är synlig.
Förekommande sammansatt sökning
Det finns 6 kombinationer av följande:
1. MÅSTE och MÅSTE: Ta skärningspunkten mellan på varandra följande frågeklausuler. 2. MUST och MUST_NOT: Indikerar att sökresultaten för frågeklausulen som motsvarar MUST_NOT inte kan inkluderas i sökresultaten. 3.SHOULD och MUST_NOT: När funktionen används kontinuerligt är den densamma som MUST och MUST_NOT. 4. När SHOULD och MUST används tillsammans blir resultatet sökresultatet för MUST-klausulen, men SHOULD kan påverka sorteringen. 5. BÖR och BÖR: Indikerar relationen mellan "eller", och det slutliga sökresultatet är unionen av alla sökklausuler. 6.MUST_NOT och MUST_NOT: meningslös, återvinning utan resultat.
Driv projektet
Vid denna punkt kan du starta projektet för att lägga till, uppdatera och söka efter gränssnittskoden enligt följande:
Fel kan rapporteras enligt följande:
Ett ohanterat undantag inträffade under behandlingen av begäran.
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(sträng fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions-alternativ)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Efter installationen kan du se Resources-katalogen i packages\jieba.NET-katalogen, som innehåller ordboken och andra datafiler som krävs för att köra jieba.NET, och den enklaste konfigurationsmetoden är att kopiera hela Resources-katalogen till den katalog där assembleren finns, så att de inbyggda standardkonfigurationsvärdena används jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet behöver lägga till en konfigurationsmapp, koden är följande:
Testet skapade 500 nya dokument (relaterade till min faktiska situation, endast som referens), och disken upptar 119 KB, som visas i figuren nedan:
(Slut)
|