Requisiti: La ricerca in testo completo sul sito è una funzione comunemente usata ed è comunemente utilizzata in base ad essaElasticSearch、SolrDistribuzione e sviluppo, e ora ne sono stati rilasciati due nuoviRedisSearch、MeiliSearchI primi due sono più pesanti, anche se gli ultimi due non sono pesanti quanto i primi due, ma devono comunque distribuire servizi dipendenti; questo articolo utilizza Lucene.Net + Jieba.NET per costruire una ricerca on-site leggera.
Lucene.Net
Lucene.Net è un porting .NET di Lucene ed è un kit open source per lo sviluppo di motori di ricerca full-text, cioè non è un motore di ricerca full-text, ma un'architettura di motore di ricerca full-text che fornisce un motore di query completo e un motore di indicizzazione.
Sito:Il login del link ipertestuale è visibile. Indirizzo GitHub:Il login del link ipertestuale è visibile.
Jieba.NET
Jieba.NET è un participio cinese jieba. Versione .NET (implementazione C#). Può svolgere funzioni come segmentazione delle parole, annotazione delle parti del discorso, estrazione di parole chiave, ecc. per testi cinesi, e supporta dizionari personalizzati.
Indirizzo GitHub:Il login del link ipertestuale è visibile.
Per prima cosa, diamo un'occhiata ai rendering:
Personalizza l'analizzatore
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream in Lucene TokenStream: Un flusso ottenuto dopo che il tokenizer è stato elaborato. Questo flusso memorizza varie informazioni sulla segmentazione delle parole, che possono essere ottenute efficacemente tramite TokenStream. Di seguito è il processo di conversione del file stream in un TokenStream: Prima si usano il Tokenizer per segmentare le parole, i diversi tokenizer hanno tokenzier differenti; dopo che il tokenzier è stato separato, filtra i dati suddivisi in parole tramite il TokenFilter, come le parole di stop. Dopo aver filtrato, combina tutti i dati in un TokenStream.
Riferimento:
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
Per personalizzare l'analizzatore Lucene in base a Jieba.NET, il primo riferimento è il seguente:
Fai riferimento direttamente al pacchetto Lucene.Net.Analysis.Common, poiché Lucene.Net.Analysis.Common si basa sul pacchetto Lucene.Net per scaricarsi automaticamente.
Crea un nuovo JiebaTokenizer.cs con il seguente codice:
Crea un nuovo JiebaAnalyzer.cs con il seguente codice:
Lucene.Net Creare nuovi documenti e ricerche
Aggiungi dati da un sito web a Lucene regolarmente o attivati, e Lucene memorizza il documento su un disco fisico tramite l'analizzatore e poi chiama l'interfaccia di ricerca per trovarlo.
Il codice della classe di aiuto LuceneHelper è il seguente:
Memorizza la memoria
Store.YES: Non solo indicizzerà i dati, ma li salverà anche, così che i risultati della ricerca possano restituire informazioni sul campo. Store.NO: Solo i dati saranno indicizzati, i dati non saranno salvati e i risultati della ricerca non potranno ottenere queste informazioni sul campo.Risparmia spazio su disco;
Come mostrato di seguito:
Tipo di campo di campo
I tipi di campo in Lucene.Net sono Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Si prega di utilizzare il tipo di dato appropriato in base alla tua situazione.
TextField vs. StringField
TextField sarà sicuramente lessicato, StringField non eseguirà analisi lessicale dei contenuti memorizzati in doc, si veda:Il login del link ipertestuale è visibile.
Ricerca composta di avvenimenti
Ci sono 6 combinazioni dei seguenti:
1. MUST e MUST: Ottenere l'intersezione delle clausole di query consecutive. 2. MUST e MUST_NOT: Indica che i risultati della ricerca della clausola di query corrispondente al MUST_NOT non possono essere inclusi nei risultati della query. 3. SHOULD e MUST_NOT: Quando usate continuamente, la funzione è la stessa di MUST e MUST_NOT. 4. Quando SHOULD e MUST vengono usati insieme, il risultato è il risultato di ricerca della clausola MUST, ma SHOULD può influenzare l'ordinamento. 5. SHOULD e SHOULD: Indica la relazione tra "oppure", e il risultato finale della ricerca è l'unione di tutte le clausole di ricerca. 6.MUST_NOT e MUST_NOT: privo di significato, prelievo senza risultati.
Gestisci il progetto
A questo punto, puoi avviare il progetto per aggiungere, aggiornare e cercare il codice dell'interfaccia come segue:
Gli errori possono essere segnalati come segue:
Durante l'elaborazione della richiesta si è verificata un'eccezione non gestita.
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(stringa fullPath, modalità FileMode, accesso FileAccess, condivisione FileShare, opzioni FileOptions)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Dopo l'installazione, puoi vedere la directory Resources nella cartella package\jieba.NET, che contiene il dizionario e altri file di dati necessari per eseguire jieba.NET, e il metodo di configurazione più semplice è copiare l'intera directory Resources nella directory dove si trova l'assembly, così che i valori di configurazione predefiniti integrati vengano utilizzati jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet deve aggiungere una cartella di configurazione, il codice è il seguente:
Il test ha creato 500 nuovi documenti (relativi alla mia situazione reale, solo per riferimento), e il disco occupa 119KB, come mostrato nella figura sottostante:
(Fine)
|