Existen cuatro principios para utilizar la concordancia es: concordancia de frases, concordancia aproximada de pendiente, recomendación de búsqueda, etc.
Se devolverán los documentos que contengan java o spark, o los documentos que contengan java y spark. Realmente no sabemos cuál se acerca más entre doc, java y spark. Si solo queremos buscar Java Spark y no se pueden insertar otros caracteres en el medio o solo se pueden separar varios caracteres en el medio, ¿se puede hacer una búsqueda de texto completo en este momento? La respuesta es no.
Dos requisitos:
1. Java Spark, muy juntos, no se pueden insertar otros caracteres en el medio, por lo que se buscará este documento.
2. Java Spark, pero cuanto más cercanas estén las dos palabras Java y Spark, mayor será la puntuación del documento y mayor será la clasificación.
La concordancia de fase es la concordancia de frases, buscando frases en su conjunto.
3. Posición temporal después de la segmentación de palabras
De los resultados, podemos ver que la posición temporal de hello es 0, world y java spark son 1, 2 y 3 en. orden.
4. Principio de búsqueda de frases (lo mismo ocurre con la búsqueda aproximada)
Hola mundo, java spark doc1
Hola, spark java doc2
Hola doc1(0)
wolrd doc1(1)
documento java 1(2) documento 2(2)
documento spark 1(3) ) Archivo 2(1)
Java spark-> Frases coincidentes
Java spark->Java y spark
Java-> )Archivo2(2)
spark->Archivo1(3)Archivo2(1)
Para encontrar los documentos que tiene cada $term, necesitas Un documento que debe contener cada $term antes de que puedas sacarlo y continuar el cálculo.
doc 1->Java y Spark->La posición de Spark es mayor que Java 1->La posición de Java es 2 y la posición de Spark es 3, lo que simplemente cumple con las condiciones y doc1 cumple con condiciones.
Documento 2 ->Java y Spark-& gt; La posición de Java es 2, la posición de Spark es 1, la posición de Spark es 1 más pequeña que la posición de Java, no 1->; no está satisfecho, entonces doc2 no coincide.
Los principios de búsqueda aproximados similares son los mismos.
¿Qué significa pendiente? La búsqueda de texto, donde hay varios términos $, debe seguir varios pasos para coincidir con un documento, y la cantidad de pasos es grande. En pocas palabras, es la distancia entre Java y Spark después del intercambio o la distancia entre Java y Spark + 2 (donde 2 es el número de pasos necesarios para el intercambio). En la búsqueda inclinada, cuanto más cercanas estén las palabras clave, mayor será la puntuación de relevancia.
Por ejemplo, si busca java spark, contiene java, o contiene spark, o ambos, y contiene el documento de java spark tanto como sea posible, o java y spark están cerca, ocupando el primer lugar, y al mismo tiempo Proporciona recuerdo y precisión.
La búsqueda directa con la frase match_phrase hará que todos los $terms aparezcan en el campo del documento y la distancia debe estar dentro del rango de inclinación para que coincida.
En este momento, puede usar bool combinado con la consulta de coincidencia y la consulta match_phrase para lograr el efecto anterior.
Coincidencia -& gt; Siempre que se realice una coincidencia simple en un $term, se puede entender que el resultado devolverá el documento correspondiente a $term, escaneará el índice invertido y será ok después de escanear.
Coincidencia de fases -> Primero, escanee todas las listas de documentos en busca de $term, busque una lista de documentos que contengan todos los $term y luego calcule para cada documento la posición de cada $term; El rango; Slop, requiere operaciones complejas para determinar si un documento se puede mover y combinar con slop.
El rendimiento de las consultas de concordancia es mucho mayor que el de la concordancia de frase y la concordancia de proximidad (con pendiente). Porque los dos últimos necesitan calcular la distancia de la posición.
El rendimiento de las consultas de concordancia es 10 veces mejor que la concordancia de frase y 20 veces mejor que la concordancia de proximidad.
De forma predeterminada, la coincidencia puede coincidir con 1000 documentos. Es necesario calcular la igualación aproximada una vez para cada DOC para determinar si puede igualarse mediante slop y luego contribuir con su propia puntuación.
Pero en muchos casos, puede haber 65.438+0.000 documentos después de cotejar. De hecho, la mayoría de los usuarios buscan por página, por lo que solo pueden leer las primeras páginas como máximo. Por ejemplo, si una página es 10, pueden leer como máximo cinco páginas, lo que equivale a 50 páginas.
La coincidencia aproximada solo necesita hacer coincidir los primeros 50 documentos mediante el movimiento de pendiente y aportar su propia puntuación. No es necesario calcular ni aportar los 1000 documentos.
Coincidencia: 1000 documentos, de hecho, cada documento tiene una puntuación en este momento; coincidencia aproximada, 50 documentos principales, puntos importantes que hacen que los 50 documentos principales y los ejemplos de $term sean más cercanos y destacados.
1, búsqueda de prefijo
C3D0-KD345
C3K5-DFG65
C4I8-UI365
C3- >;Lo anterior Se buscan dos:>Buscar según el prefijo de la cadena
No hay antecedentes de caso en la publicación, porque es relativamente simple. Simplemente muéstreles a todos el nuevo índice que creó manualmente.
2. Principio de la búsqueda de prefijo
La consulta de prefijo no calcula la puntuación de relevancia y la única diferencia con el filtro de prefijo es el conjunto de bits de caché del filtro.
Por ejemplo, escanee todo el índice invertido.
Cuanto más corto sea el prefijo, más documentos se procesarán y peor será el rendimiento. Intente buscar con prefijos largos.
¿Cómo se realiza la búsqueda de prefijos? ¿Por qué el rendimiento es pobre?
Competencia
C3-D0-KD345
C3-K5-DFG65
C4-I8-UI365
Búsqueda de texto completo
Cada cadena debe estar segmentada.
c3 doc1, doc2
d0
kd345
k5
dfg65
El cuarto componente del complemento es deficiente
i8
ui365
C3->; Escanee el índice invertido->; porque solo 2 documentos tienen c3, ya encontrados ->No es necesario seguir buscando otros $term
Las puntuaciones de las coincidencias tienden a ser altas.
Si es una búsqueda por prefijo, entonces (la búsqueda por prefijo no es segmentación de palabras)
C3-D0-KD345
C3-K5-DFG65
C4-I8-UI365
C3->; primero escaneé c3-D0-KD345 y fue genial. Encontré una cadena con el prefijo C3 -> Todavía tengo que continuar buscando, porque hay otro c3-K5-DFG65 detrás de ella, y puede haber muchas otras cadenas con el prefijo C3 -> Escaneaste una coincidencia El prefijo de $ término,
no se puede detener, la búsqueda debe continuar -& gt; no se puede completar hasta que se escanee todo el índice invertido, por lo que el rendimiento del prefijo es muy pobre.
3. Búsqueda con comodines
Similar a la búsqueda por prefijo, pero más potente.
C3D0-KD345
C3K5-DFG65
C4I8-UI365
5 caracteres -D cualquier número de caracteres 5
5?-*5: comodín para expresar una semántica de búsqueda difusa más compleja.
? :Cualquier carácter
*: 0 o cualquier número de caracteres
El rendimiento también es muy pobre y se debe escanear todo el índice invertido para que esté bien.
4. Búsqueda general
C[0-9]. +
[0-9]: Números dentro del rango especificado.
[a-z]: Letras en el rango especificado.
. : un personaje.
+: La expresión regular anterior puede aparecer una o varias veces.
Los comodines y las expresiones regulares cumplen con el principio de prefijo y ambos escanean todo el índice, lo que genera un rendimiento deficiente.
Ingrese hola y pensará en hola mundo, hola nosotros, hola ganar, hola viento, etc.
El principio es similar a match_phrase, la única diferencia es que el último término $ se utiliza como prefijo para la búsqueda.
Hola, estoy buscando y buscando los archivos correspondientes
Con w como prefijo, se escaneará todo el índice invertido y se encontrarán todos los documentos que comiencen con w.
Luego busque todos los documentos, es decir, los documentos que contengan caracteres que comiencen con hola y w.
Calcule en función de su pendiente y vea si puede hacer que hello w coincida con la posición de las palabras que comienzan con hola y W en el documento dentro del rango de pendiente.
También se puede especificar Slop, pero solo se usará el último $term como prefijo
Max_expansions: especifica el número máximo de $terms que coincide con el prefijo si el número excede. este número, la coincidencia ya no continuará. Esto limita el rendimiento.
De forma predeterminada, el prefijo debería escanear todos los $terms en el índice invertido en busca de palabras que comiencen con w, pero esto es terrible. Puede usar max_expansions para limitar cuántos $terms coincide como máximo con el prefijo w, de modo que no se continúe buscando en el índice invertido.
Intente no usarlo, porque el último prefijo siempre necesita escanear una gran cantidad de índices y el rendimiento puede ser deficiente. Puede usar ngram para lograrlo.
¿Qué es ngram?
Rápido, ngram de cinco longitudes
ngram length=1, q u i c k
ngram length=2, qu ui ic ck
ngram length=3, clic rápido
ngram length=4, quic uick
ngram length=5, rápido
¿Qué es edgngram?
Rápido, después de la primera letra está ngram.
q
Quart (abreviatura de quart)
qui
Quick
Quick
Rápido
p>
-La recomendación de búsqueda no está completa. . . . . . . . .