ES realiza una búsqueda de rango en la matriz int (¡Experimente el poder de ES!)

Usando ES para buscar, el contenido está en las dos tablas de padre e hijo (padre uno para muchos hijos). Al diseñar el esquema de sincronización de logstash, se encontraron muchos hoyos.

Muchos de ellos son tierra de nadie con materiales chinos, y he explorado mucho tiempo, y por la presente los registro.

 

La búsqueda del campo de la tabla principal es relativamente simple, coincidencia, rango, impulso, las palabras clave se pueden usar directamente

La subtabla tiene valores enumerados, yo uso group_concat para agregar a campos separados por comas,

Al mismo tiempo, en es / _template, agregue una plantilla al índice, use un tokenizador de coma personalizado para el campo de agregación y cambie el campo a buscar por distancia al tipo de geo_point (logstash también debe agregar

add_field => {"location" => "%{latitude},%{longitude}" })

De esta manera, la mayoría de las búsquedas en la tabla secundaria pueden coincidir (por ejemplo, cuando busca los datos de la tabla principal del tipo de tabla secundaria que contiene A, group_concat es A, AB, AC, y puede encontrarlo cuando marca A)

 

De hecho, la mayoría de las necesidades se pueden resolver de esta manera, pero la anomalía se acerca y debe realizar una búsqueda de rango en el campo [precio] de la subtabla.

Por ejemplo, 1200, 2300, 3450, tal búsqueda se puede encontrar en el rango de 1000-2000.

Al mismo tiempo, el gerente de producto es muy terco e insiste en esta exigencia.

 

De ninguna manera, pensé en usar la tabla secundaria como tabla principal, pero el campo de la tabla principal es 10 veces mayor que la tabla secundaria, y hay demasiados datos redundantes; pensé en verificar la tabla secundaria primero y luego sacar todos los ID de tabla principal como condiciones de consulta. Si fuerza a la asociación a verificar una amplia gama de precios, se colapsará; también pensé en usar la indexación de padres e hijos, pero hay pocos documentos relacionados, y parece que no es el PRINCIPAL PROMOCION DE ES.

Al final, un gran tipo finalmente encontró una solución. Cuando busque varios números, use una matriz de números. El rango busca cualquiera y puede acertar.

Luego de llamar al 666, el resto es la configuración de Logstash

Dividir el campo separado por comas en una matriz es muy simple

split => ["price", ","]

El problema que surge también es muy simple, la cuerda está partida o la cuerda

Finalmente, después de buscar durante mucho tiempo, encontré una conversión de tipo usando Ruby en https://stackoverflow.com/questions/41400364/logstash-convert-array-of-objects-into-array-of-terms , que se siente confiable

Yo mismo verifiqué la gramática de ruby ​​y finalmente escribí el script para convertir la matriz

ruby {
        code => "event.set('price', event.get('price').map{ |n| n=n.to_i })"

}


 

 

Supongo que te gusta

Origin blog.csdn.net/u012452555/article/details/84998086
Recomendado
Clasificación