2012-08-31 13 views
6

Quiero ejecutar una consulta de búsqueda elástico que agrupa los datos por la combinación de dos campos diferentes (latitud y longitud)elasticsearch doble faceta

curl -XGET http://www.my_server:9200/idx_occurrence/Occurrence/_search?pretty=true -d '{ 
    "query": { 
     "query_string" : { 
      "fields" : ["genus_interpreted","dataset"], 
      "query": "Pica 2", 
      "default_operator" : "AND" 
     } 
    }, 
    "facets": { 
     "test": { 
      "terms": { 
       "fields" :["decimalLatitude","decimalLongitude"], 
       "size" : 500000000 
      } 
     } 
    } 
}' 

Da un doble número de resultados de lo esperado ... cualquier ¿idea?

Los más RELEVANTES partes de la respuesta son ...

_shards":{ 
    "total":5, 
    "successful":5, 
    "failed":0 
}, 
"hits":{ 
    "total":**37**, 
    "max_score":3.9314494, 
    "hits":[{ 

los accesos totales, 37 es el resultado de la consulta si no se aplican las facetas. Este total es la media del total en facetas (ver más abajo)

"facets":{ 
    "test":{ 
     "_type":"terms", 
     "missing":0, 
     "total":**74**, 
     "other":0, 
     "terms":[ 
      {"term":"167.21665954589844","count":5}, 
      {"term":"167.25","count":4}, 
      {"term":"167.14999389648438","count":4}, 
      {"term":"167.1041717529297","count":4}, 
      {"term":"-21.04166603088379","count":4},..... 

Por lo tanto, la agrupación faceta se realiza separetely (por latitud y luego por longitud).

Tenga en cuenta que no puedo agrupar solo por latitud o longitud, ya que varios registros pueden compartir la latitud (pero tienen una longitud diferente) o viceversa.

+0

se puede mostrar la salida se obtiene? – CharlesB

+0

No puedo aceptar respuestas que no considero que realmente resuelvan la pregunta ... – user1249791

Respuesta

4

Usted está haciendo un TermsFacet en múltiples campos: latitud y longitud. Eso significa que la latitud y la longitud se agregan juntas ya que eran un campo único. Verá una entrada para cada valor individual, que puede ser una latitud o una longitud. El hecho de que obtenga 74 entradas demuestra que tiene 74 valores distintos de latitud y longitud en su índice, lo que tiene sentido. ¿Qué quieres lograr exactamente? ¿Una entrada de faceta para cada par de latitud y longitud? En ese caso, usted tiene dos opciones:

  • Agregar un campo adicional al índice que contiene la pareja en sí y luego faceta en él
  • crear el par de longitud latitue sobre la marcha utilizando un script plazo. Eche un vistazo a documentation para saber más. Aquí hay un ejemplo que debe ayudar, darle una oportunidad:
{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "facets" : { 
     "tags" : { 
      "terms" : { 
       "field" : "latitude", 
       "script" : "term + \"_\" + _source.longitude" 
      } 
     } 
    } 
} 
+0

Quiero lograr exactamente agrupar todos los datos que comparten exactamente la misma ubicación (misma latitud y longitud). Agregar un nuevo campo ahora es un poco complicado, por lo que me gustaría concatenar latitud y longitud sobre la marcha, usando esto para agrupar. una faceta como ... "terms": {"fields": ["decimalLatitude", "decimalLongitude"], "script": "term [1]", "size": 500 obras, término de referencia [1] a decimalLongitude, pero no es todo lo que necesito. De hecho, incluso si puedo unirme al término [0] [1], esto no se puede comparar con nada en el índice, así que no puedo encontrar la manera de obtenerlo ... – user1249791

+0

Eche un vistazo a mi respuesta actualizada. – javanna

+0

exactamente lo que necesitaba, ¡gracias! – user1249791