Encontrar miles de elementos que hacen match con miles


(Guillermo Mir) #1

Hola!
Me gustaría saber si alguien se ha encontrado con un problema similar que al planteo y como lo ha resuelto.
Imaginemos que tenemos miles de peticiones de navegación (packetbeat) en ES. Los índices tienen unos tamaños aproximados de 50Gb diarios. Por poner un ejemplo, las peticiones tienen un campo host (el dominio al que se hace la petión; google.com, www.elastic.co, discus.elastic.co...) Por otro lado tengo listas de hosts (de varios miles de hosts, a modo de lista blanca o negra de accesos).
Cual sería la manera de decirle a elastic que me retorne todos las peticiones que pertenecen a una lista? O por el contrario, cuales son las peticiones que no pertenecen? Hay que tener en cuenta que las listas sufren cambios (se añaden y quitan hosts) de una forma más o menos frecuente.
Esta claro un term filter parece posible, pero con miles de campos ya no parece óptimo.
Y ya para rizar el rizo, si lo que tengo son elementos con wildcard? osea: *.elastic.co

Muchas gracias por la ayuda!


(Ugo Sangiorgi) #2

Hola Guillermo,
Puedes solventar eso de manera muy sencilla usando "terms":
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html

Supongamos que tengas dos indices mybeat-2018 donde estas sus beats y whitelist donde esta su lista de hosts.

como ejemplo si en el indice mybeat-2018 tienes documentos como:

PUT /mybeat-2018/_doc/1
{
	"host" : "elastic.co",
	"ttl" : 40
}

PUT /mybeat-2018/_doc/2
{
	"host" : "elastic.co",
	"ttl" : 666
}

PUT /mybeat-2018/_doc/3
{
	"host" : "google.com",
	"ttl" : 55
}

y en el whitelist puedes tener una lista de hosts como:

PUT /whitelist/_doc/1
{
 "hosts" : [
   {
     "name" : "elastic.co"
   },
   {
     "name" : "twitter.com"
   }
 ]
}

Entonces en una búsqueda por los términos en whitelist en los indices mybeat-* debes referenciar el documento que contiene la lista de hosts (en nuestro caso el id: 1), algo como:

GET /mybeat-*/_search
{
    "query" : {
        "terms" : {
            "host" : {
                "index" : "whitelist",
                "type" : "_doc",
                "id" : "1",
                "path" : "hosts.name"
            }
        }
    }
}

(Guillermo Mir) #3

Hola!
Muchas gracias, no sabía de esa opción. La voy a probar ... ya te contaré.


(system) #4

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.