Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 4068|Respuesta: 2

[Fuente] [Combate práctico] Usa Lucene.Net + Jieba.NET para crear una búsqueda in situ ligera

[Copiar enlace]
Publicado el 29-10-2023 18:05:43 | | | |
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 ellaElasticSearchSolrDespliegue y desarrollo, y ahora se han publicado dos nuevosRedisSearchMeiliSearchEn 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)




Anterior:Sigue la cuenta oficial y consigue el "código de invitación" gratis
Próximo:.NET convierte la cadena varbinary de la base de datos en un array de bytes[]
 Propietario| Publicado el 29-10-2023 18:10:40 |
Elasticsearch (ES) no logra escribir datos en la solución de fallo
https://www.itsvse.com/thread-10568-1-1.html

Elasticsearch limpia automáticamente los índices para liberar espacio en disco
https://www.itsvse.com/thread-10273-1-1.html

Elasticsearch-7.x utiliza xpack para la autenticación de seguridad
https://www.itsvse.com/thread-10206-1-1.html

Despliega el servicio Elasticsearch usando Docker
https://www.itsvse.com/thread-10148-1-1.html

Elasticsearch utiliza elasticdump para hacer copias de seguridad y migrar datos
https://www.itsvse.com/thread-10143-1-1.html

Instala la versión independiente del tutorial de elasticsearch 7.10.2 en Windows
https://www.itsvse.com/thread-9962-1-1.html

Introducción a la configuración de resaltados de búsqueda en Elasticsearch
https://www.itsvse.com/thread-9562-1-1.html

.NET/C# Utiliza la depuración de Elasticsearch para ver la información de solicitudes y respuestas
https://www.itsvse.com/thread-9561-1-1.html

ASP.NET Core Link Trace (5) Los datos de Jaeger persisten en elasticsearch
https://www.itsvse.com/thread-9553-1-1.html

Elasticsearch (ES) replica el índice clon
https://www.itsvse.com/thread-9545-1-1.html

Estado de Elasticsearch(ES) del grupo: estado amarillo (6 de 7)
https://www.itsvse.com/thread-9544-1-1.html

Salud del clúster Elasticsearch(ES): análisis de fallos rojo
https://www.itsvse.com/thread-9543-1-1.html

Información de geolocalización de Java en ElasticSearch (geo_point)
https://www.itsvse.com/thread-6444-1-1.html

ElasticsearchParseException[campo debe ser [lat], [lon] o [geohash]]
https://www.itsvse.com/thread-6442-1-1.html

Tipo de campo de mapeo elasticsearch
https://www.itsvse.com/thread-6436-1-1.html

Elasticsearch:No handler for type [string] declared on field[XX]的解决办法
https://www.itsvse.com/thread-6420-1-1.html

【Acción Práctica】Tutorial de instalación de Kibana para Elasticsearch
https://www.itsvse.com/thread-6400-1-1.html

Coordenadas geogeográficas de la familia de características avanzadas Elasticsearch
https://www.itsvse.com/thread-6399-1-1.html

Las consultas compuestas de ElasticSearch deben, deben must_not usar
https://www.itsvse.com/thread-6334-1-1.html

Elasticsearch elimina e indexa todos los datos del documento
https://www.itsvse.com/thread-6321-1-1.html

[Combate real]. net/c# Búsqueda de llamada elasticsearch vía NEST [con código fuente]
https://www.itsvse.com/thread-6294-1-1.html

Causas y soluciones para unassigned_shards Elasticsearch de un solo nodo
https://www.itsvse.com/thread-6193-1-1.html

Tutorial sobre cómo instalar elasticsearch-analysis-ik en elasticsearch-6.5.2
https://www.itsvse.com/thread-6191-1-1.html

Instala el plugin elasticsearch-6.5.2 elasticsearch-head
https://www.itsvse.com/thread-6190-1-1.html

Instalación y despliegue de Centos 7 Elasticsearch-6.5.2 tutorial
https://www.itsvse.com/thread-6173-1-1.html

Selección de motores de búsqueda: Elasticsearch vs Solr
https://www.itsvse.com/thread-6168-1-1.html
 Propietario| Publicado el 5-11-2023 21:27:45 |
Dirección de prueba de búsqueda:https://www.itsvse.com/blog_xzz.html
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com