2011-12-19 16 views
6

Soy nuevo en Elasticsearch. No creo que entiendo completamente el concepto de consulta y filtros. En mi caso, solo quiero usar filtros ya que no quiero usar funciones avanzadas como la puntuación.Consulta de Elasticsearch DSL desde una instrucción de SQL

¿Cómo convertiría la siguiente instrucción SQL en una consulta elasticsearch?

SELECT * FROM advertiser 
WHERE company like '%com%' 
AND sales_rep IN (1,2) 

Lo que tengo hasta ahora:

curl -XGET 'localhost:9200/advertisers/advertiser/_search?pretty=true' -d ' 
{ 
    "query" : { 
     "bool" : { 
      "must" : { 
       "wildcard" : { "company" : "*com*" } 
      } 
     } 
    }, 
    "size":1000000 

}' 

Cómo agrego el quirófano filtros en el campo sales_rep?

Gracias

Respuesta

2

Añadir una cláusula de "debería" después de su cláusula de necesidad. En una consulta bool, una o más cláusulas should deben coincidir de forma predeterminada. En realidad, puede establecer el "minimum_number_should_match" para que sea cualquier número. Consulte bool query docs.

Para su caso, esto debería funcionar.

"should" : [ 
     { 
      "term" : { "sales_rep_id" : "1" } 
     }, 
     { 
      "term" : { "sales_rep_id" : "2" } 
     } 
    ], 

El mismo concepto funciona para los filtros bool. Simplemente cambie "consulta" por "filtro". Los documentos del filtro bool son here.

0

me encuentro con este post 4 años demasiado tarde ...

De todas formas, tal vez el siguiente código podría ser útil ...

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "wildcard": { 
      "company": "*com*" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "terms": { 
       "sales_rep_id": [ "1", "2" ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
Cuestiones relacionadas