Uso de Es y principio 2: tecnología scoll, resultados de rebote, indicadores de reconstrucción sin parada, etc.
Elasticsearch utiliza el algoritmo de frecuencia $TERM/frecuencia inversa de documento, conocido como algoritmo TF/IDF.
$ Frecuencia de término (TF): ¿Cuántas veces aparece cada entrada en el texto de búsqueda en el texto del campo? Cuantas más ocurrencias, más fuerte será la correlación.
Por ejemplo: solicitud de búsqueda: hola mundo
Hola, el mundo está muy bien
Doctor 2: Hola, ¿cómo estás?
Doc1 debe ser superior a doc2 porque hola mundo aparece en doc1.
Frecuencia Inversa de Documentos (IDF): Número de veces que aparece cada entrada del texto de búsqueda en todos los documentos de todo el índice. Cuantas más veces aparezca, menor será su relevancia.
Solicitud de búsqueda: hola mundo
doc1: Hola, hoy es un buen día
Doctor 2: Hola mundo, ¿cómo estás?
Por ejemplo, hay 10.000 documentos en el índice y la palabra hola aparece 1.000 veces en todos los documentos. La palabra mundo aparece 100 veces en todos los documentos.
Entonces el resultado final debe ser una puntuación de palabra más alta.
Existe otra regla sobre _score, ES.
Especificación de longitud del campo: longitud del campo cuanto más largo es el campo, más débil es la correlación.
Solicitud de búsqueda: hola mundo
Doc 1: {"title": "hola artículo", "content": "Baba ABA 10000 palabras" }
Doc 2: {"title": "myarticle", "content":"blablabala 10000 palabras, hola mundo"}
Hola mundo aparece la misma cantidad de veces en todo el índice. Al final, doc1 obtuvo una puntuación más alta.
Al buscar, debe confiar en el índice invertido; al ordenar, debe confiar en el índice ortográfico para ver cada campo de cada documento y luego ordenarlo. El llamado índice ortogonal es en realidad el valor del documento, que también se puede utilizar para ordenar, agregar, filtrar y otras operaciones. Los valores del documento se guardan en el disco. En este momento, si hay suficiente memoria, el sistema operativo la almacenará automáticamente en caché en la memoria y el rendimiento seguirá siendo alto. Si no hay suficiente memoria, el sistema operativo la escribe en el disco.
El índice ortogonal es el siguiente:
Beneficios de la invariancia del índice invertido
Suponiendo que dos documentos tienen el mismo valor del campo de marca de tiempo, los resultados de la búsqueda son por marca de tiempo Clasificación de campos. Debido a que la solicitud de búsqueda se sondea entre todas las réplicas de fragmentación válidas, cuando llega la solicitud de fragmentación principal, los dos documentos pueden estar en un orden y la solicitud de fragmentación de réplica está en otro orden.
Este es el llamado problema de resultados rebotados: cada vez que el usuario actualiza la página, los resultados de búsqueda aparecen en un orden diferente. Este problema se puede evitar haciendo que el mismo usuario utilice el mismo fragmento todo el tiempo. Puede establecer el parámetro de preferencia en un valor arbitrario específico, como un ID de sesión de usuario.
Como
Si desea encontrar, por ejemplo, más de 6,5438 millones de datos a la vez, el rendimiento será muy pobre. En este momento, scoll se usa generalmente para desplazarse por los lotes hasta que se hayan consultado y procesado todos los datos.
Scoll parece paginación, pero los escenarios de uso son en realidad diferentes. La paginación se utiliza principalmente para la búsqueda página por página para que los usuarios la vean; Scoll se utiliza principalmente para la recuperación por lotes de datos para el procesamiento del sistema.
Al utilizar la búsqueda continua, puede buscar primero un lote de datos, luego buscar un lote de datos la próxima vez, y así sucesivamente hasta buscar todos los datos.
La búsqueda de Scoll guardará una instantánea de la vista en la primera búsqueda y luego solo proporcionará búsquedas de datos basadas en la instantánea anterior. Si los datos cambian durante este tiempo, no serán visibles para el usuario.
El método de clasificación basado en _doc tiene mayor rendimiento.
Cada vez que enviamos una solicitud de desplazamiento, también necesitamos especificar un parámetro de desplazamiento y una ventana de tiempo dentro del cual se puede completar cada solicitud de búsqueda.
El resultado obtenido tendrá un scoll_id, deberás llevar este scoll_ID la próxima vez que envíes una solicitud de scoll.
1Crear un índice
2Modificar el índice
3Eliminar el índice
Lucene no tiene concepto de tipos. En el documento, el tipo en realidad se almacena como un campo del documento, es decir, _type, y ES filtra y filtra el tipo a través de _type.
En realidad, varios tipos en un índice se almacenan juntos, por lo que no puede haber varios tipos con el mismo nombre en un índice, y los tipos u otras configuraciones también son diferentes, porque no se pueden procesar.
Por ejemplo
El almacenamiento subyacente es así.
Coloque tipos estructuralmente similares bajo un índice. Estos tipos deben tener varios campos que sean iguales.
Si estos dos tipos de campos se colocan bajo un índice, muchos campos estarán vacíos en el Lucene subyacente y habrá serios problemas de rendimiento.
1. Estrategia dinámica personalizada
Verdadero: cuando encuentre campos desconocidos, realice un mapeo dinámico.
Incorrecto: ignorar áreas desconocidas.
Estricto: informa un error cuando encuentres áreas desconocidas.
2. Personaliza tu propia plantilla de mapeo dinámico (nivel de tipo).
Las configuraciones anteriores son campos de /my_index/my_type. Si termina en _en, se asignará automáticamente al tipo de cadena.
La configuración del campo no se puede modificar. Si desea modificar un campo, debe restablecer un índice basado en la nueva asignación, luego consultar los datos en lotes y usar la API masiva para reescribir el índice.
Al realizar consultas por lotes, se recomienda utilizar la API de desplazamiento y utilizar subprocesos múltiples para recuperar datos simultáneamente. Cada vez que scoll consulta un dato en una fecha específica, se puede entregar a un hilo.
(1) Al principio, los datos se insertaban mediante mapeo dinámico, pero algunos datos accidentalmente tenían el formato de fecha 2017-01-01, por lo que los títulos de los campos se asignaron automáticamente al tipo de fecha, pero de hecho el negocio pensó que debería ser un tipo de cadena.
(2) Al agregar un valor de título de tipo cadena al índice más adelante, se informará un error.
(3) Si desea modificar el tipo de título en este momento, es imposible.
(4) En este momento, la única forma es restablecer el índice, es decir, restablecer un índice, consultar los datos del índice anterior y luego importar el nuevo índice.
(5) Si el nombre del índice antiguo es old_index, y el nombre del nuevo índice es new_index, y la aplicación Java del terminal ya está funcionando con old_index, ¿necesita detener la aplicación Java antes? ¿Reiniciar la aplicación Java, cambiar el índice utilizado a new_index? Durante este proceso, la aplicación Java se cerrará y se reducirá la disponibilidad.
(6) Entonces, asigne a Java un alias que apunte al índice anterior. La aplicación Java se utiliza primero y la aplicación Java se opera primero con el alias Goods_index. En este punto, en realidad apunta al antiguo my_index.
(7) Cree un nuevo índice y ajuste su tipo de título a cadena.
(8) Utilice la API de desplazamiento para consultar datos en lotes.
(9) La API masiva se utiliza para escribir un lote de datos descubiertos por scoll en un nuevo índice.
(10) Repita 8 ~ 9, consulte lote tras lote de datos y escriba cada lote de datos en un nuevo índice en la API masiva.
(11) Cambie el alias de Goods_index a my_index_new y la aplicación Java utilizará directamente los datos del nuevo índice a través del alias de índice. No es necesario detener la aplicación Java, tiene alta disponibilidad sin compromiso.
(12) Simplemente consulte directamente a través del alias product_index.
Para problemas de proceso existentes, debe esperar a que fsync descargue el segmento en el disco antes de poder abrir el segmento para la búsqueda.
En este caso, puede pasar más de 1 minuto desde que se escribe el documento hasta que se puede buscar. ! ! ¡Esta no es una búsqueda casi en tiempo real! ! ! El principal cuello de botella es que fsync en realidad escribe datos en el disco a través de IO del disco, lo que lleva mucho tiempo.