SOLR es un servidor de aplicaciones de búsqueda de nivel empresarial independiente que proporciona una interfaz API similar a un servicio web. Los usuarios pueden enviar archivos XML de un determinado formato al servidor de motores de búsqueda a través de solicitudes HTTP y generar índices; También pueden enviar solicitudes de búsqueda a través de operaciones HTTP GET y obtener el resultado de retorno en formato XML/JSON. Desarrollado usando Java5, basado en Lucene.
Lucene es un subproyecto del equipo 4 del Proyecto de Yakarta de la Fundación Apache Software. Es un kit de herramientas de búsqueda de búsqueda de texto completo de código abierto, es decir, no es un motor de búsqueda de texto completo completo, sino una arquitectura de motor de búsqueda de texto completo, que proporciona un motor de consulta completo y un motor de índice, y un motor de análisis de texto parcial (idiomas occidentales en inglés y alemán).
Entre ellos, los principios básicos de la búsqueda de texto completo de Lucene son consistentes con la tecnología en el curso de búsqueda web impartido por Guo Jundaniu. Utiliza la segmentación de palabras, análisis de gramática semántica, modelo de espacio vectorial y otras tecnologías para lograrlo. La siguiente es una nota de publicación de blog más detallada: http://www.cnblogs.com/guochunguang/articles/3641008.html
1. Discusión general
Definición según http://lucene.apache.org/java/docs/index.html:
Lucene es una biblioteca eficiente de búsqueda de texto completo basada en Java.
Entonces, antes de entender a Lucene, debe tomarse un tiempo para aprender sobre la búsqueda de texto completo.
Entonces, ¿qué es la búsqueda de texto completo? Esto comienza con los datos en nuestras vidas.
Los datos en nuestras vidas generalmente se dividen en dos tipos: datos estructurados y datos no estructurados.
• Datos estructurados: se refieren a datos con formato fijo o longitud finita, como bases de datos, metadatos, etc.
• Datos no estructurados: se refieren a datos con una longitud incierta o ningún formato fijo, como correos electrónicos, documentos de Word, etc.
Por supuesto, algunos lugares también mencionarán el tercer tipo, los datos semiestructurados, como XML, HTML, etc., cuando se puede procesar de acuerdo con los datos estructurados, o el texto plano puede extraerse para procesar como datos no estructurados.
Los datos no estructurados también se denominan datos de texto completo.
Según la clasificación de datos, las búsquedas también se dividen en dos tipos:
• Busque datos estructurados: por ejemplo, buscando bases de datos, use declaraciones SQL. Por ejemplo, buscar metadatos, como usar Windows Búsqueda para buscar nombres de archivos, tipos, tiempo de modificación, etc.
• Busque datos no estructurados: por ejemplo, la búsqueda de Windows también puede buscar contenido de archivo, comando GREP en Linux y, por ejemplo, el uso de Google y Baidu pueden buscar una gran cantidad de datos de contenido.
Hay dos métodos principales para buscar datos no estructurados, es decir, datos de texto completo:
Uno es el escaneo en serie: el llamado escaneo secuencial, por ejemplo, buscar un archivo con una determinada cadena, es mirar cada documento a la vez. Para cada documento, ver desde el principio hasta el final. Si este documento contiene esta cadena, entonces este documento es el archivo que estamos buscando, y luego mire el siguiente archivo hasta que se escaneen todos los archivos. Si usa Windows para buscar, también puede buscar contenido de archivo, pero es bastante lento. Si tiene un disco duro de 80 g, si desea encontrar un archivo con una determinada cadena, tiene miedo de que no pueda hacerlo sin pasar unas horas. Esta es también la misma manera para los comandos GREP en Linux. Puede pensar que este método es relativamente primitivo, pero para archivos con pequeños volúmenes de datos, este método sigue siendo el más directo y conveniente. Pero para una gran cantidad de archivos, este método es muy lento.
Algunas personas pueden decir que el escaneo secuencial de datos no estructurados es muy lento, pero la búsqueda de datos estructurados es relativamente rápido (debido a que los datos estructurados tienen una cierta estructura, un cierto algoritmo de búsqueda puede usarse para acelerar la velocidad), entonces ¿no es suficiente para encontrar una manera de hacer que nuestros datos no estructurados tengan una estructura cierta?
Esta idea es natural, pero forma la idea básica de la búsqueda de texto completo, que es extraer parte de la información en los datos no estructurados y reorganizarla para que tenga una cierta estructura, y luego buscar los datos con una determinada estructura, para lograr el propósito de buscar relativamente rápido.
Esta parte de la información extraída de los datos no estructurados y luego reorganizado se llama índice.
Esta declaración es relativamente abstracta, y es fácil de entender al dar algunos ejemplos. Por ejemplo, el diccionario, la tabla de pinyin y la tabla de caracteres de verificación radical del diccionario son equivalentes al índice del diccionario. La explicación de cada personaje no está estructurada. Si el diccionario no tiene una tabla de sílaba y una tabla de caracteres de verificación radical, solo puede escanearla en el vasto mar de palabras. Sin embargo, se puede extraer información de la palabra para el procesamiento estructurado. Por ejemplo, la pronunciación está relativamente estructurada, dividida en iniciales y finales, y solo hay unos pocos tipos que pueden enumerarse uno por uno. Por lo tanto, la pronunciación se elimina y se organiza en un determinado orden, y cada pronunciación apunta al número de páginas de la explicación detallada de esta palabra. Cuando buscamos, buscamos la pronunciación de acuerdo con el pinyin estructurado, y luego podemos encontrar nuestros datos no estructurados, es decir, la explicación de las palabras.
Este proceso de crear primero un índice y luego buscar el índice se llama búsqueda de texto completo.
La imagen a continuación es de "Lucene en acción", sino que no solo describe el proceso de búsqueda de Lucene, sino que también describe el proceso general de búsqueda de texto completo.
La búsqueda de texto completo generalmente se divide en dos procesos: creación de índice (indexación) e índice de búsqueda (búsqueda).
• Creación del índice: el proceso de extraer información de todos los datos estructurados y no estructurados en el mundo real y crear un índice.
• Índice de búsqueda: es el proceso de obtener la solicitud de consulta del usuario, buscar el índice creado y luego devolver el resultado.
Por lo tanto, hay tres problemas importantes en la búsqueda de texto completo:
1. ¿Qué existe exactamente en el índice? (Índice)
2. ¿Cómo crear un índice? (Indexación)
3. ¿Cómo buscar índices? (Buscar)
A continuación estudiamos cada problema en secuencia.
2. ¿Qué existe exactamente en el índice?
¿Qué debe almacenarse exactamente en el índice?
Primero, veamos por qué la velocidad de escaneo secuencial es lenta:
De hecho, es causada por la inconsistencia entre la información que queremos buscar y la información almacenada en los datos no estructurados.
La información almacenada en datos no estructurados es qué cadenas contiene cada archivo, es decir, archivos conocidos, y es relativamente fácil buscar cadenas, es decir, la asignación de archivo a cadena. La información que queremos buscar es qué archivos contienen esta cadena, es decir, una cadena conocida y el archivo deseado, es decir, la asignación de la cadena a la cadena. Los dos son exactamente lo contrario. Por lo tanto, si el índice siempre puede guardar la asignación de una cadena a otro, la velocidad de búsqueda mejorará enormemente.
Dado que la asignación de una cadena a un archivo es un proceso inverso del archivo a una asignación de cadenas, el índice que almacena dicha información se denomina índice inverso .
La información guardada del índice inverso es generalmente la siguiente:
Supongamos que hay 100 documentos en mi colección de documentos. En aras de la conveniencia, numeramos el documento del 1 al 100 y obtenemos la siguiente estructura.
A la izquierda hay una serie de cuerdas llamadas diccionarios .
Cada cadena apunta a una lista vinculada del documento que contiene esta cadena, que se llama lista de publicación .
Con la indexación, la información guardada es consistente con la información a buscar, lo que puede acelerar enormemente la búsqueda.
Por ejemplo, si queremos encontrar un documento que contenga la cadena "Lucene" y la cadena "Solr", solo necesitamos los siguientes pasos:
1. Elimine la lista de enlaces de documento que contiene la cadena "Lucene".
2. Elimine la lista de enlaces de documento que contiene la cadena "Solr".
3. Al combinar la lista vinculada, busque archivos que contengan tanto "Lucene" como "Solr".
Al ver este lugar, algunas personas pueden decir que la búsqueda de texto completo acelera la búsqueda, pero con el proceso de indexación adicional, las dos pueden no ser mucho más rápidas que el escaneo secuencial. De hecho, con el proceso de indexación, la recuperación de texto completo no es necesariamente más rápida que el escaneo secuencial, especialmente cuando el volumen de datos es pequeño. Crear un índice en una gran cantidad de datos también es un proceso muy lento.
Sin embargo, todavía hay una diferencia entre los dos. El escaneo secuencial es un escaneo cada vez, y el proceso de crear un índice solo debe ser de una vez por todas. Cada búsqueda, el proceso de crear un índice no tiene que pasar, solo buscando el índice creado.
Esta es también una de las ventajas de la búsqueda de texto completo sobre escaneo secuencial: indexación una vez, usando varias veces.
3. Cómo crear un índice
El proceso de creación de índice de la búsqueda de texto completo generalmente tiene los siguientes pasos:
Paso 1: Algunos documentos originales se indexarán (documentos).
Para facilitar la explicación del proceso de creación de índice, aquí usamos dos archivos como ejemplos:
Archivo uno: a los estudiantes se les debe permitir salir con sus amigos, pero no se les permite beber cerveza.
Archivo 2: Mi amigo Jerry fue a la escuela para ver a sus alumnos, pero los encontró borrachos que no están permitidos.
Paso 2: pase el documento original al tokenizer.
El componente del participio de la palabra (tokenizer) hará las siguientes cosas (este proceso se llama tokenize):
1. Divida el documento en palabras separadas.
2. Retire los signos de puntuación.
3. Retire la palabra de parada.
La llamada palabra de parada son algunas de las palabras más comunes en un idioma. Como no tiene un significado especial, no puede ser una palabra clave de búsqueda en la mayoría de los casos. Por lo tanto, al crear un índice, se eliminará esta palabra y se reducirá el tamaño del índice.
Palabra de parada en inglés como: "el", "a", "esto", etc.
Para el tokenizador de cada idioma, hay un conjunto de palabras de parada.
El resultado obtenido después de un participio de palabras (tokenizer) se llama elemento de palabra.
En nuestro ejemplo, obtenemos el siguiente elemento de palabra (token):
"Estudiantes", "permitidos", "ir", "sus", "amigos", "permitidos", "beber", "cerveza", "mi", "amigo", "jerry", "fue", "escuela", "ver", "sus", "estudiantes", "encontrados", "ellos", "borrachos", "permitidos".
Paso 3: Pase el token obtenido al componente de procesamiento del lenguaje (procesador lingüístico).
El componente de procesamiento del lenguaje (procesador lingüístico) se ocupa principalmente de los elementos de palabras resultantes (tokens).
Para el inglés, el componente de procesamiento del lenguaje (procesador lingüístico) generalmente hace lo siguiente:
1. Cambiar a minúsculas (minúsculas).
2. Reduzca la palabra en forma raíz, como "automóviles" a "automóvil", etc. Esta operación se llama: Stemming.
3. Convierta las palabras en formas raíz, como "conducir" a "conducir", etc. Esta operación se llama lemmatización.
Similitudes y diferencias entre el siglo y la lematización:
• Simétrico: Stemming y Lemmatization hacen que el vocabulario sea una forma raíz.
• Los dos métodos son diferentes:
◦ Sistema adopta el método de "reducción": "automóviles" al "automóvil", "conducir" a "conducir".
◦ La ilematización adopta el método de "transformación": "condujo" a "conducir", "conducir" a "conducir".
• Los algoritmos de los dos son diferentes:
◦ La situación adopta principalmente un algoritmo fijo para hacer esta reducción, como eliminar "s", eliminar "ing" y agregar "e", cambiar "atiional" a "comió" y cambiar "toral" a "tion".
◦ La ilematización utiliza principalmente el método para guardar un determinado diccionario para hacer esta transformación. Por ejemplo, hay asignaciones de "conducir" a "conducir", "conducir" a "conducir", "am, son" ser "en el diccionario. Al hacer una transformación, solo busque el diccionario.
• La derivación y la lematización no son relaciones mutuamente excluyentes, sino que tienen intersecciones. Algunas palabras pueden lograr la misma conversión utilizando ambos métodos.
El resultado de un procesador lingüístico se llama término.
En nuestro ejemplo, después del procesamiento del lenguaje, la palabra (término) obtenida es la siguiente:
"Estudiante", "permitir", "ir", "su", "amigo", "permitir", "beber", "cerveza", "mi", "amigo", "jerry", "ir", "escuela", "ver", "su", "estudiante", "encontrar", "ellos", "beber", "permitir".
Es precisamente debido a los pasos de procesamiento del lenguaje que se puede buscar la búsqueda de la unidad, y también se puede buscar en la unidad.
Paso 4: Pase la palabra obtenida (término) al componente de índice (indexador).
Indexer hace principalmente lo siguiente:
1. Cree un diccionario utilizando la palabra resultante (término).
En nuestro ejemplo, el diccionario es el siguiente:
Término | ID de documento |
Alumno | 1 |
permitir | 1 |
ir | 1 |
Su | 1 |
amigo | 1 |
permitir | 1 |
Beber | 1 |
cerveza | 1 |
Mi | 2 |
amigo | 2 |
alemán | 2 |
ir | 2 |
escuela | 2 |
ver | 2 |
su | 2 |
Alumno | 2 |
Encontrar | 2 |
Ellos | 2 |
Beber | 2 |
permitir | 2 |
2. Ordene el diccionario alfabéticamente.
Término | ID de documento |
permitir | 1 |
permitir | 1 |
permitir | 2 |
cerveza | 1 |
Beber | 1 |
Beber | 2 |
Encontrar | 2 |
amigo | 1 |
amigo | 2 |
ir | 1 |
ir | 2 |
su | 2 |
alemán | 2 |
Mi | 2 |
escuela | 2 |
ver | 2 |
Alumno | 1 |
Alumno | 2 |
Su | 1 |
Ellos | 2 |
• La frecuencia del documento significa la frecuencia del documento, lo que indica cuántos archivos contienen esta palabra (término).
• La frecuencia significa la frecuencia de la palabra, lo que significa que este archivo contiene varias de las palabras (término).
Por lo tanto, para la palabra "permitir", hay dos documentos que contienen esta palabra (término), por lo que hay dos documentos que siguen la lista de documentos después de la palabra (término). El primer elemento representa el primer documento que contiene "Permitir", es decir, documento 1. En este documento, "Permitir" aparece dos veces, y el segundo elemento representa el segundo documento que contiene "Permitir" es el documento 2. En este documento, "Permitir" aparece una vez.
Hasta ahora, se ha creado el índice, y podemos encontrar rápidamente el documento que queremos a través de él.
Y en el proceso, nos sorprendió descubrir que también se pueden encontrar búsquedas de "impulso", "conducir", "conducir" y "impulsado". Porque en nuestro índice, "conducir", "conducido" y "impulsado" se procesarán a través del lenguaje y se convertirán en "impulso". Al buscar, si ingresa "conducir", la declaración de consulta ingresada también pasará por uno o tres pasos aquí, y luego se convertirá en una consulta "unidad", para que pueda buscar el documento deseado.
3. ¿Cómo buscar índices?
Parece que podemos anunciar "Hemos encontrado la documentación que queremos".
Sin embargo, el asunto no había terminado, y se descubrió que era solo un aspecto de la búsqueda de texto completo. ¿No es así? Si solo uno o diez documentos contienen las cadenas que consultamos, las encontramos. Pero, ¿qué pasa si hay miles, o incluso miles? ¿Cuál es el archivo que más desea?
Abra Google, por ejemplo, si desea encontrar un trabajo en Microsoft, ingresa "Microsoft Job" y encuentra un total de 22600,000 resultados devueltos. Qué gran número, fue un problema que de repente descubrí que no se encontró, y demasiados también fueron un problema. Con tantos resultados, ¿cómo se pone los más relevantes primero?
Por supuesto, Google hace un buen trabajo, encontrará trabajos en Microsoft de una vez. Imagine lo terrible que sería si los primeros fueran todos "Microsoft hace un buen trabajo en la industria del software ..."
¿Cómo encontrar las declaraciones de consulta más relevantes entre miles de resultados de búsqueda como Google?
¿Cómo determinar la correlación entre el documento buscado y la declaración de consulta?
Esto ha vuelto a nuestra tercera pregunta: ¿cómo buscar índices?
La búsqueda se divide principalmente en los siguientes pasos:
Paso 1: El usuario ingresa a la declaración de consulta.
Las declaraciones de consultas tienen ciertas sintaxis, al igual que nuestro lenguaje ordinario.
Las diferentes declaraciones de consultas tienen una sintaxis diferente, como las declaraciones SQL tienen cierta sintaxis.
La sintaxis de la declaración de consulta varía según la implementación del sistema de recuperación de texto completo. Los más básicos incluyen: y, o no, etc.
Por ejemplo, la declaración de entrada del usuario: Lucene y aprendí no Hadoop.
Explique que el usuario quiere encontrar un documento que contenga Lucene y aprendido pero que no incluya Hadoop.
Paso 2: Realice un análisis léxico, análisis gramatical y procesamiento del lenguaje de la declaración de consulta.
Dado que la declaración de consulta tiene sintaxis, también es necesario realizar análisis gramaticales, análisis gramatical y procesamiento del lenguaje.
1. El análisis léxico se usa principalmente para identificar palabras y palabras clave.
Como en el ejemplo anterior, después del análisis léxico, las palabras incluyen Lucene, Learn, Hadoop y las palabras clave incluyen y no.
Si se encuentra una palabra clave ilegal en el análisis léxico, se producirá un error. Por ejemplo, Lucene AMD aprendió, donde AMD está involucrado en la consulta como una palabra ordinaria debido a la ortografía ortográfica de y.
2. El análisis de sintaxis forma principalmente un árbol de sintaxis basado en las reglas gramaticales de la declaración de consulta.
Si encuentra que la declaración de consulta no cumple con las reglas de sintaxis, se informará un error. Si Lucene no y se enteró, se producirá un error.
Como en el ejemplo anterior, el árbol de sintaxis formado por Lucene y aprendió no Hadoop es el siguiente:
3. El procesamiento del lenguaje es casi el mismo que el procesamiento del lenguaje durante la indexación.
Por ejemplo, el aprendizaje se aprende, etc.
Después del segundo paso, obtenemos un árbol de sintaxis procesado por el lenguaje.
Paso 3: Busque el índice y obtenga documentos que coincidan con el árbol de sintaxis.
Este paso se divide en varios pasos pequeños:
1. Primero, en la tabla de índice inverso, busque la lista de enlaces de documentos que contiene Lucene, Learn y Hadoop.
2. En segundo lugar, fusione las listas vinculadas que contienen Lucene y aprendan a obtener una lista vinculada del documento que contiene Lucene y Learn.
3. Luego, realice una diferencia entre esta lista vinculada y la lista vinculada del documento de Hadoop, y elimine el documento que contiene Hadoop, para obtener una lista vinculada del documento que contenga Lucene y Learn y no contenga Hadoop.
4. Esta lista de enlaces de documento es el documento que estamos buscando.
Paso 4: Ordene los resultados en función de la correlación entre el documento obtenido y la declaración de consulta.
Aunque en el paso anterior, obtuvimos el documento deseado, los resultados de la consulta deben clasificarse por su correlación con la declaración de consulta, y cuanto más relevantes son los más altos.
¿Cómo calcular la correlación entre documentos y declaraciones de consulta?
Es mejor considerar la declaración de consulta como un documento corto y calificar la relevancia entre los documentos. Si la correlación con puntajes altos es buena, debe clasificarse primero.
Entonces, ¿cómo se califica la relación entre documentos?
Esta no es una tarea fácil. Primero, echemos un vistazo a juzgar la relación entre las personas.
En primer lugar, al mirar a una persona, a menudo hay muchos elementos , como personalidad, creencias, pasatiempos, ropa, altura, gordura y delgadez.
En segundo lugar , para la relación entre las personas, diferentes elementos tienen una importancia diferente . El carácter, la creencia y los pasatiempos pueden ser más importantes. La ropa, la altura y la gordura pueden no ser tan importantes. Por lo tanto, las personas con la misma personalidad, creencias y pasatiempos similares tienen más probabilidades de convertirse en buenos amigos, pero las personas con ropa, altura, altura, y delgaduras también pueden convertirse en buenos amigos.
Por lo tanto, al juzgar la relación entre las personas, primero debemos averiguar qué elementos son más importantes para la relación entre las personas , como la personalidad, las creencias y los pasatiempos. En segundo lugar, necesitamos juzgar la relación entre estos elementos de dos personas , como una persona tiene una personalidad alegre, la otra persona tiene una personalidad extrovertida, uno cree en el budismo, el otro cree en Dios, a una le encanta jugar baloncesto y a la otra ama jugar al fútbol. Descubrimos que ambos son muy positivos en términos de personalidad, amables en términos de fe y deportes en términos de pasatiempos, por lo que la relación entre ellos debería ser muy buena.
Echemos un vistazo a la relación entre las empresas.
Primero, mire una empresa, que consta de muchas personas, como gerente general, gerente, director técnico, empleados comunes, guardias de seguridad, portadores, etc.
En segundo lugar, diferentes personas tienen una importancia diferente para la relación entre las empresas . Los gerentes generales, los gerentes y los directores técnicos pueden ser más importantes, y los empleados ordinarios, los guardias de seguridad y los porteros pueden ser menos importantes. Entonces, si la relación entre los gerentes generales, gerentes y directores de tecnología de dos compañías es relativamente buena, las dos compañías son propensas a tener una mejor relación. Sin embargo, incluso si un empleado ordinario tiene un odio profundo con un empleado ordinario de otra compañía, es poco probable que afecte la relación entre las dos compañías.
Por lo tanto, para juzgar la relación entre una empresa, primero debemos averiguar quién es más importante para la relación entre la empresa , como el gerente general, el gerente y el director de tecnología. En segundo lugar, necesitamos juzgar la relación entre estas personas , que no es tan buena como los gerentes generales de las dos compañías, los gerentes son aldeanos y los principales oficiales de tecnología son socios empresariales. Descubrimos que la relación entre las dos compañías es buena, ya sea el gerente general, el gerente o el director de tecnología, es buena, por lo que la relación entre las dos compañías debería ser buena.
Después de analizar las dos relaciones, echemos un vistazo a cómo juzgar la relación entre documentos .
En primer lugar, un documento consiste en muchas palabras (término) , como búsqueda, lucene, texto completo, esto, a, qué, etc.
En segundo lugar, el término diferente tiene una importancia diferente para la relación entre documentos . Por ejemplo, para este documento, la búsqueda, la luceno, el texto completo es relativamente importante, esto, a, lo que puede ser relativamente poco importante. Entonces, si ambos documentos contienen búsqueda, luceno y texto completo, la correlación entre estos dos documentos es mejor. Sin embargo, incluso si un documento contiene esto, a, qué y el otro documento no contiene esto, a, qué, no puede afectar la correlación entre los dos documentos.
Por lo tanto, para juzgar la relación entre documentos, primero descubra qué palabras (término) son las más importantes para la relación entre documentos, como la búsqueda, la lucene, el texto completo. Luego juzga la relación entre estas palabras (término).
El proceso de descubrir la importancia de una palabra (término) para un documento se denomina proceso de calcular el peso de una palabra.
Hay dos parámetros para calcular el término peso. El primero es la palabra (término) y el segundo es el documento (documento).
El peso de una palabra indica la importancia de esta palabra en este documento. Cuanto más importante sea la palabra (término), mayor será el peso (peso del término) y, por lo tanto, desempeñará un papel más importante en el cálculo de la correlación entre los documentos.
El proceso de juzgar la relación entre las palabras (término) y, por lo tanto, obtener correlaciones de documentos se utiliza para utilizar un algoritmo de modelo de espacio vectorial (modelo de espacio vectorial).
Analicemos estos dos procesos cuidadosamente:
1. El proceso de calcular el peso (peso de término).
Hay dos factores principales que influyen en la importancia de una palabra (término) en un documento:
• Frecuencia de término (TF): es decir, ¿cuántas veces aparece este término en este documento? Cuanto más grande es el TF, más importante significa.
• Frecuencia de documentos (DF): es decir, cuántos documentos contienen término secundario. Cuanto más grande es el DF, menos importante significa.
¿Es fácil de entender? Cuantas más veces aparezca la palabra (término) en el documento, más importante es para el documento. Por ejemplo, la palabra "búsqueda" aparece muchas veces en este documento, lo que significa que este documento habla principalmente de este aspecto. Sin embargo, en un documento en inglés, si esto parece más a menudo, ¿significa que es más importante? No, esto se ajusta por el segundo factor. El segundo factor muestra que cuantos más documentos contienen esta palabra (término), significa que la palabra (término) es demasiado ordinaria y no lo suficiente como para distinguir estos documentos, por lo que menos importante es.
Esta es también la tecnología que aprendemos los programadores. Para los propios programadores, cuanto más profundos dominaran esta tecnología, mejor (más profundos dominan significa que cuanto más tiempo pasen, más grandes son TF) y más competitivos son cuando buscan un trabajo. Sin embargo, para todos los programadores, cuanto menos personas que entiendan esta tecnología, mejor (menos personas que la entienden) y cuanto más competitivas son para encontrar un trabajo. Esta es la razón por la cual el valor humano radica en la irrlacabilidad.
Una vez que se entiende la verdad, echemos un vistazo a la fórmula:
Esta es solo una implementación típica simple de la fórmula de cálculo de peso de término. Las personas que implementan el sistema de recuperación de texto completo tendrán su propia implementación, y Lucene es ligeramente diferente de esto.
2. El proceso de juzgar la relación entre el término y la obtención de la correlación del documento, es decir, el algoritmo (VSM) del modelo de espacio vectorial.
Consideramos los documentos como una serie de palabras (término), cada palabra (término) tiene un peso (peso de término) y diferentes palabras (término) afectan el cálculo de puntuación de la relevancia del documento en función de su propio peso en el documento.
Entonces consideramos el peso del término en este documento como un vector.
Documento = {Term1, Term2, ..., Term n}
Documento vector = {weight1, weight2, ..., peso n}
Del mismo modo, consideramos la declaración de consulta como un documento simple y también la expresamos en vectores.
Consulta = {Term1, término 2, ..., término n}
Consulta vector = {peso1, peso2, ..., peso n}
Ponemos todos los vectores de documentos buscados y los vectores de consulta en un espacio n-dimensional, y cada palabra (término) es unidimensional.
Como se muestra en la imagen:
Creemos que cuanto más pequeño es el ángulo entre dos vectores, mayor es la correlación.
Por lo tanto, calculamos el valor coseno del ángulo incluido como una puntuación de correlación. Cuanto más pequeño sea el ángulo, mayor es el valor coseno, mayor es el puntaje y mayor es la correlación.
Algunas personas pueden preguntar que las declaraciones de consulta son generalmente muy cortas y contienen muy pocas palabras (término), por lo que las dimensiones del vector de consulta son muy pequeñas, mientras que el documento es muy largo, contiene muchas palabras (términos), y las dimensiones del vector del documento son muy grandes. ¿Por qué son las dimensiones de ambos en su gráfico N?
Aquí, dado que quieres ponerlo en el mismo espacio vectorial, las dimensiones naturales son las mismas. Diferente al mismo tiempo, tome la unión de los dos. Si no hay palabra (término), el peso (peso de término) es 0.
La fórmula de puntuación de correlación es la siguiente:
Por ejemplo, hay 11 términos en la declaración de consulta, y se buscan tres documentos. Los pesos respectivos (peso de término) son los siguientes.
T1 | T2 | T3 | T4 | t5 | T6 | T7 | T8 | T9 | T10 | T11 | |
D1 | 0 | 0 | .477 | 0 | .477 | .176 | 0 | 0 | 0 | .176 | 0 |
D2 | 0 | .176 | 0 | .477 | 0 | 0 | 0 | 0 | .954 | 0 | .176 |
D3 | 0 | .176 | 0 | 0 | 0 | .176 | 0 | 0 | 0 | .176 | .176 |
Q | 0 | 0 | 0 | 0 | 0 | .176 | 0 | 0 | .477 | 0 | .176 |
Por lo tanto, los puntajes de correlación entre los tres documentos y la declaración de consulta se calculan como:
Por lo tanto, el Documento 2 tiene la correlación más alta, las primeras devoluciones, seguido del documento 1 y finalmente el Documento 3.
Hasta ahora, podemos encontrar la documentación que más queremos.
Habiendo dicho tanto, todavía no he entrado en Lucene, pero es solo la teoría básica en la recuperación de la información. Sin embargo, después de mirar a Lucene, encontraremos que Lucene es una práctica básica de esta teoría básica. Por lo tanto, en los artículos que analizan Lucene, a menudo veremos la aplicación de la teoría anterior en Lucene.
Antes de ingresar a Lucene, un resumen del proceso de creación y búsqueda de índice anterior es como se muestra en la figura:
Esta cifra se refiere al artículo "Lucene, el motor de búsqueda de texto completo del código fuente abierto" en http://www.lucene.com.cn/about.htm
1. Proceso de indexación:
1) Hay una serie de archivos indexados
2) El archivo indexado se analiza sintaxidamente y el procesamiento del lenguaje para formar una serie de palabras (término).
3) Cree una tabla de diccionario e inverso a través de la indexación.
4) Escriba el índice en el disco duro a través del almacenamiento del índice.
2. Proceso de búsqueda:
a) Declaración de consulta de entrada del usuario.
b) Se obtienen una serie de palabras (término) a través del análisis gramatical y el análisis del lenguaje de la declaración de consulta.
c) Obtenga un árbol de consulta a través del análisis de sintaxis.
d) Lea el índice en la memoria a través del almacenamiento del índice.
e) Use el árbol de consulta para buscar el índice, para obtener la lista de enlaces de documento para cada palabra (término), enviar la lista de enlaces de documento y obtener el documento de resultado.
f) Ordene el documento de resultado buscado a la relevancia de la consulta.
g) Devuelva el resultado de la consulta al usuario.
2. Ordene el diccionario alfabéticamente.
Término | ID de documento |
permitir | 1 |
permitir | 1 |
permitir | 2 |
cerveza | 1 |
Beber | 1 |
Beber | 2 |
Encontrar | 2 |
amigo | 1 |
amigo | 2 |
ir | 1 |
ir | 2 |
su | 2 |
alemán | 2 |
Mi | 2 |
escuela | 2 |
ver | 2 |
Alumno | 1 |
Alumno | 2 |
Su | 1 |
Ellos | 2 |
3. Fusionar las mismas palabras (término) en la lista de enlaces de reversa del documento (lista de publicación).
En esta tabla, hay varias definiciones: