Exigences : La recherche en texte intégral sur le site est une fonction couramment utilisée, et elle est couramment utilisée en fonction de celle-ciElasticSearch、SolrDéploiement et développement, et maintenant deux nouveaux ont été publiésRedisSearch、MeiliSearchLes moteurs de recherche, les deux premiers sont plus lourds, bien que les deux derniers ne soient pas aussi lourds que les deux premiers, mais doivent tout de même déployer des services dépendants, cet article utilise Lucene.Net + Jieba.NET pour construire une recherche sur site légère.
Lucene.Net
Lucene.Net est un portage .NET de Lucene et un kit de développement de moteur de recherche en texte intégral open source, c’est-à-dire qu’il ne s’agit pas d’un moteur de recherche en texte intégral, mais d’une architecture de moteur de recherche en texte intégral qui fournit un moteur de requête et un moteur d’indexation complets.
Site:La connexion hyperlientérée est visible. Adresse GitHub :La connexion hyperlientérée est visible.
Jieba.NET
Jieba.NET est un participe chinois jieba. .NET version (implémentation C#). Il peut effectuer des fonctions telles que la segmentation des mots, l’annotation des parties du discours, l’extraction de mots-clés, etc. pour le texte chinois, et prend en charge des dictionnaires personnalisés.
Adresse GitHub :La connexion hyperlientérée est visible.
Tout d’abord, regardons les rendus :
Personnaliser l’analyseur
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream in Lucene TokenStream : Un flux obtenu après le traitement du tokenizer. Ce flux stocke diverses informations sur la segmentation des mots, qui peuvent être obtenues efficacement via TokenStream. Voici le processus de conversion du flux de fichiers en TokenStream : D’abord, utilisez le Tokenizer pour segmenter les mots, différents tokenizers ont des tokenziers différents, une fois le tokenzier séparé, filtrez les données qui ont été divisées en mots via le TokenFilter, comme les stop-mots. Après filtrage, combinez toutes les données dans un TokenStream.
Référence:
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
Pour personnaliser l’analyseur Lucène en fonction de Jieba.NET, la première référence est la suivante :
Référez-vous directement au paquet Lucene.Net.Analysis.Common, car Lucene.Net.Analysis.Common dépend du paquet Lucene.Net pour se télécharger automatiquement.
Créez un nouveau JiebaTokenizer.cs avec le code suivant :
Créez un nouveau JiebaAnalyzer.cs avec le code suivant :
Lucene.Net Créer de nouveaux documents et recherches
Ajoutez régulièrement ou déclenché des données d’un site web à Lucene, et Lucene stocke le document sur un disque physique via l’analyseur, puis appelle l’interface de recherche pour le trouver.
Le code de la classe d’aide LuceneHelper est le suivant :
Stockage de stockage
Store.OUI : Il ne se contente pas d’indexer les données, mais aussi de sauvegarder les données, afin que les résultats de recherche puissent restituer des informations sur les champs. Store.NO : Seules les données seront indexées, et les données ne seront pas sauvegardées, et les résultats de recherche ne peuvent pas obtenir cette information de champ.Économise de l’espace disque;
Comme montré ci-dessous :
Type de champ
Les types de champs dans Lucene.Net sont Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Veuillez utiliser le type de données approprié selon votre situation.
TextField vs. StringField
TextField sera définitivement lexicalisé, StringField ne réalisera pas d’analyse lexicale du contenu stocké dans doc, voir :La connexion hyperlientérée est visible.
Recherche composée d’occurrence
Il existe 6 combinaisons des éléments suivants :
1. MUST et MUST : Obtenir l’intersection des clauses de requête consécutives. 2. MUST et MUST_NOT : Indique que les résultats de recherche de la clause de requête correspondant à la MUST_NOT ne peuvent pas être inclus dans les résultats de la requête. 3. SHOULD et MUST_NOT : Lorsqu’elle est utilisée en continu, la fonction est la même que MUST et MUST_NOT. 4. Lorsque SHOULD et MUST sont utilisés ensemble, le résultat est le résultat de recherche de la clause DOIT, mais SHOULD peut affecter le tri. 5. SHOULD et SHOULD : Indique la relation entre « ou », et le résultat final de recherche est l’union de toutes les clauses de recherche. 6.MUST_NOT et MUST_NOT : dénué de sens, récupération sans résultats.
Gérez le projet
À ce stade, vous pouvez commencer le projet pour ajouter, mettre à jour et rechercher le code de l’interface comme suit :
Les erreurs peuvent être signalées comme suit :
Une exception non prise en charge s’est produite lors du traitement de la demande.
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(chaîne fullPath, mode FileMode, accès aux fichiers, partage FileShare, options FileOptions)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Après l’installation, vous pouvez voir le répertoire Resources dans le répertoire packages\jieba.NET, qui contient le dictionnaire et d’autres fichiers de données nécessaires pour exécuter jieba.NET, et la méthode de configuration la plus simple consiste à copier l’intégralité du répertoire Resources dans le répertoire où se trouve l’assembleur, afin que les valeurs de configuration par défaut intégrées soient utilisées jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet doit ajouter un dossier de configuration, dont le code est le suivant :
Le test a généré 500 nouveaux documents (liés à ma situation réelle, à titre de référence seulement), et le disque occupe 119 Ko, comme montré dans la figure ci-dessous :
(Fin)
|