Requisitos: La búsqueda en texto completo en el sitio es una función comúnmente utilizada y se utiliza comúnmente en función de ellaElasticSearch、SolrDespliegue y desarrollo, y ahora se han publicado dos nuevosRedisSearch、MeiliSearchEn los motores de búsqueda, los dos primeros son más pesados, aunque los dos últimos no son tan pesados como los dos primeros, pero aún necesitan desplegar servicios dependientes; este artículo utiliza Lucene.Net + Jieba.NET para crear una búsqueda en el sitio ligera.
Lucene.Net
Lucene.Net es un port de Lucene en .NET y es un kit de desarrollo de motores de búsqueda de código abierto en texto completo, es decir, no es un motor de búsqueda de texto completo, sino una arquitectura de motor de búsqueda de texto completo que proporciona un motor de consulta y un motor de indexación completos.
Sitio:El inicio de sesión del hipervínculo es visible. Dirección de GitHub:El inicio de sesión del hipervínculo es visible.
Jieba.NET
Jieba.NET es un participio chino jieba. .NET versión (implementación en C#). Puede realizar funciones como segmentación de palabras, anotación de partes gramaticales, extracción de palabras clave, etc. para texto chino, y soporta diccionarios personalizados.
Dirección de GitHub:El inicio de sesión del hipervínculo es visible.
Primero, echemos un vistazo a los renders:
Personalizar el analizador
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream in Lucene TokenStream: Un flujo obtenido después de que el tokenizador ha sido procesado. Este flujo almacena diversa información sobre la segmentación de palabras, que puede obtenerse eficazmente a través de TokenStream. A continuación se muestra el proceso de convertir el flujo de archivos en un TokenStream. Primero, usar el Tokenizer para segmentar las palabras, diferentes tokenizadores tienen diferentes tokenziers; después de separar el tokenzier, filtrar los datos que se han dividido en palabras a través del TokenFilter, como las palabras de parada. Después de filtrar, combina todos los datos en un TokenStream.
Referencia:
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
Para personalizar el analizador Lucene según Jieba.NET, la primera referencia es la siguiente:
Consulta directamente el paquete Lucene.Net.Analysis.Common, ya que Lucene.Net.Analysis.Common depende de que el paquete Lucene.Net se descargue automáticamente.
Crea un nuevo JiebaTokenizer.cs con el siguiente código:
Crea una nueva JiebaAnalyzer.cs con el siguiente código:
Lucene.Net Crear nuevos documentos y búsquedas
Si añades datos de una web a Lucene de forma regular o con activación, Lucene almacena el documento en un disco físico a través del analizador, y luego llama a la interfaz de búsqueda para encontrarlo.
El código de la clase de ayuda LuceneHelper es el siguiente:
Almacenar almacenamiento
Store.YES: No solo indexará los datos, sino que también los guardará para que los resultados de búsqueda puedan devolver la información del campo. Store.NO: Solo se indexarán los datos, no se guardarán y los resultados de búsqueda no podrán obtener esta información de campo.Ahorra espacio en disco;
Como se muestra a continuación:
Tipo de campo
Los tipos de campo en Lucene.Net son Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Por favor, utiliza el tipo de datos adecuado según tu situación.
CampoTexto vs. Campo de Cuerdas
TextField será definitivamente lexicalizado, StringField no realizará análisis léxico del contenido almacenado en doc, consulta:El inicio de sesión del hipervínculo es visible.
Búsqueda compuesta de ocurrir
Hay 6 combinaciones de las siguientes:
1. MUST y MUST: Obtener la intersección de cláusulas de consulta consecutivas. 2. MUST y MUST_NOT: Indica que los resultados de búsqueda de la cláusula de consulta correspondiente a la MUST_NOT no pueden incluirse en los resultados de la consulta. 3. DEBE y MUST_NOT: Cuando se usa de forma continua, la función es la misma que DEBE y MUST_NOT. 4. Cuando DEBERÍA y DEBE se usan juntos, el resultado es el resultado de búsqueda de la cláusula DEBE, pero DEBERÍA puede afectar la ordenación. 5. DEBERÍA y DEBERÍA: Indica la relación entre "o", y el resultado final de la búsqueda es la unión de todas las cláusulas de búsqueda. 6.MUST_NOT y MUST_NOT: sin sentido, recuperación sin resultados.
Dirige el proyecto
En este punto, puedes iniciar el proyecto para añadir, actualizar y buscar el código de la interfaz de la siguiente manera:
Los errores pueden reportarse de la siguiente manera:
Durante el procesamiento de la solicitud se produjo una excepción no gestionada.
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(cadena fullPath, modo FileMode, acceso a archivos, compartir archivos, opciones de ArchivoOpciones)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Tras la instalación, puedes ver el directorio Resources en el directorio packages\jieba.NET, que contiene el diccionario y otros archivos de datos necesarios para ejecutar jieba.NET, y el método de configuración más sencillo es copiar todo el directorio Resources al directorio donde se encuentra el ensamblador, para que se utilicen los valores de configuración predeterminados integrados jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet necesita añadir una carpeta de configuración, cuyo código es el siguiente:
La prueba creó 500 documentos nuevos (relacionados con mi situación real, solo para referencia), y el disco ocupa 119KB, como se muestra en la figura siguiente:
(Fin)
|