2017-01-11 2 views
1

J'ai des problèmes d'interrogation avec elasticsearch. Donc, fondamentalement, je voulais connaître l'équivalent sql de elasticsearch.Elastic Search SQL Equivalent

Quelle est la syntaxe de recherche élastique équivalente pour cette requête sql?

SELECT * 
FROM people 
WHERE name LIKE($name%) 
     AND (gender = 0 OR age < 18) 
     AND id IN(1, 2, 3) 
     AND id NOT IN(4, 5, 6) 
     AND dead = 0 
ORDER BY status desc, 
      TIME desc 

* est juste par exemple

Répondre

0

Utiliser une requête booléenne (et requête booléenne imbriquée) vous permet d'exprimer des choses que même demande sql. La requête de termes est validée lorsqu'un de ses éléments est trouvé (OR).

POST/index_name/personnes/_search

{ 
    "query": { 
     "bool": { 
     "must": [ 
      { 
       "match": { 
        "name": "John" 
       } 
      } 
     ], 
     "filter": [ 
      { 
       "bool": { 
        "must": [ 
        { 
         "terms": { 
          "id": [ 
           1, 
           2, 
           3 
          ] 
         } 
        }, 
        { 
         "term": { 
          "dead": 0 
         } 
        }, 
        { 
         "bool": { 
          "should": [ 
           { 
           "term": { 
            "gender": 0 
           } 
           }, 
           { 
           "range": { 
            "age": { 
             "lt": 18 
            } 
           } 
           } 
          ] 
         } 
        } 
        ], 
        "must_not": [ 
        { 
         "terms": { 
          "id": [ 
           4, 
           5, 
           6 
          ] 
         } 
        } 
        ] 
       } 
      } 
     ] 
     } 
    }, 
    "sort": [ 
     { 
     "status": { 
      "order": "desc" 
     }, 
     "time": { 
      "order": "desc" 
     } 
     } 
    ] 
} 
+0

ok et ce qui est 'should'? –

+0

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-bool-query.html: "\t La clause (requête) doit apparaître dans le document correspondant. sans clause must ou filter, une ou plusieurs clauses should doivent correspondre à un document Le nombre minimum de clauses should à mettre en correspondance peut être défini en utilisant le paramètre minimum_should_match. " Désolé j'ai édité ma réponse car "devrait" aurait dû être utilisé pour exprimer OU! – Artholl