Požadavky: Fulltextové vyhledávání na webu je běžně používaná funkce a je na jejím základě běžně využívánoElasticSearch、SolrNasazení a vývoj, a nyní byly vydány dva novéRedisSearch、MeiliSearchVe vyhledávačích jsou první dvě těžší, i když poslední dvě nejsou tak náročné jako první dvě, ale stále musí nasadit závislé služby, tento článek využívá Lucene.Net + Jieba.NET k vytvoření lehkého vyhledávání na webu.
Lucene.Net
Lucene.Net je .NET port Lucene a je open-source vývojová sada pro fulltextový vyhledávací engine, tj. není to plnotextový vyhledávací engine, ale fulltextová vyhledávací architektura, která poskytuje kompletní dotazovací a indexační engine.
Poloha:Přihlášení k hypertextovému odkazu je viditelné. Adresa GitHubu:Přihlášení k hypertextovému odkazu je viditelné.
Jieba.NET
Jieba.NET je příčestí čínské jieba. .NET verze (implementace v C#). Dokáže provádět funkce jako segmentace slov, anotace slovních druhů, extrakce klíčových slov atd. pro čínský text a podporuje vlastní slovníky.
Adresa GitHubu:Přihlášení k hypertextovému odkazu je viditelné.
Nejprve se podívejme na vizualizace:
Přizpůsobit analyzátor
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream v Lucene TokenStream: Stream získaný po zpracování tokenizéru. Tento stream uchovává různé informace o segmentaci slov, které lze efektivně získat pomocí TokenStream. Následuje proces převodu souborového toku na TokenStream. Nejprve použijte Tokenizer k rozdělení slov, různé tokenizéry mají různé tokenziery, po oddělení tokenzieru filtrujte data rozdělená na slova přes TokenFilter, například stop words. Po filtrování spojte všechna data do TokenStreamu.
Odkaz:
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Pro přizpůsobení analyzátoru Lucene na základě Jieba.NET je první odkaz následující:
Přímo se podívejte na balíček Lucene.Net.Analysis.Common, protože Lucene.Net.Analysis.Common spoléhá na automatické stažení balíčku Lucene.Net.
Vytvořte nový JiebaTokenizer.cs s následujícím kódem:
Vytvořte nový JiebaAnalyzer.cs s následujícím kódem:
Lucene.Net Vytváření nových dokumentů a vyhledávání
Přidávejte data z webu do Lucene pravidelně nebo spouštěně, Lucene ukládá dokument na fyzický disk přes analyzátor a poté volá vyhledávací rozhraní, aby je našel.
Kód nápovědy LuceneHelper je následující:
Skladování v obchodě
Store.YES: Nejenže indexuje data, ale také je uloží, takže výsledky vyhledávání mohou vracet informace o poli. Store.NO: Indexována budou pouze data, data nebudou uložena a výsledky vyhledávání nemohou získat informace o tomto poli.Šetří místo na disku;
Jak je uvedeno níže:
Typ pole pole
Typy polí v Lucene.Net jsou Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Použijte prosím vhodný typ dat podle vaší situace.
TextField vs. StringField
TextField bude určitě lexikalizovaný, StringField nebude provádět lexikální analýzu obsahu uloženého v doc, viz na:Přihlášení k hypertextovému odkazu je viditelné.
Proběhnout komplexní vyhledávání
Existuje 6 kombinací následujících:
1. MUSÍ a MUSÍ: Získejte průnik po sobě jdoucích dotazovacích klauzul. 2. MUSÍ a MUST_NOT: Označuje, že výsledky vyhledávání dotazovací klauzule odpovídající MUST_NOT nelze zahrnout do výsledků dotazu. 3. SHOULD a MUST_NOT: Při nepřetržitém použití je funkce stejná jako MUSÍ a MUST_NOT. 4. Když jsou SHOULD a MUST použity společně, výsledkem je výsledek vyhledávání klauzule MUST, ale SHOULD může ovlivnit třídění. 5. MĚLO by a MĚLO BYCH: Označuje vztah mezi "nebo" a konečným výsledkem vyhledávání je sjednocení všech vyhledávacích klauzul. 6.MUST_NOT a MUST_NOT: bezvýznamné, vyhledávání bez výsledků.
Provozujte projekt
V této fázi můžete začít projekt přidávat, aktualizovat a vyhledávat kód rozhraní následovně:
Chyby mohou být hlášeny následovně:
Při zpracování požadavku došlo k nezpracované výjimce.
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(string fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Po instalaci můžete v adresáři balíčky\jieba.NET vidět adresář Resources, který obsahuje slovník a další datové soubory potřebné k jieba.NET, a nejjednodušší konfigurační metodou je zkopírovat celý adresář Resources do adresáře, kde se assembler nachází, aby se jieba.NET používaly vestavěné výchozí konfigurační hodnoty.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet potřebuje přidat konfigurační složku, kód je následující:
Test vytvořil 500 nových dokumentů (souvisejících s mou skutečnou situací, pouze pro informaci) a disk zabírá 119KB, jak je znázorněno na obrázku níže:
(Konec)
|