2017-01-11 6 views
1

elasticsearchで質問するといくつか問題があります。だから基本的に私はelasticsearchの同等SQLを知りたい。弾性検索SQLに相当する

このsqlクエリに相当するelasticsearch構文は何ですか?

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 

*ブールクエリ(およびネストされたブールクエリ)を使用して、ちょうど例えば

答えて

0

であるあなたは、SQL要求と同じものを表現することができます。 用語クエリは、その要素の1つが見つかったときに検証されます(OR)。

POST/INDEX_NAME /人/ _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と 'should'は何ですか? –

+0

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-bool-query.html: "\t 句(クエリ)が一致するドキュメントに表示されます。ブールクエリ1つまたは複数のshould節はドキュメントに一致する必要があります。一致するshould節の最小数は、minimum_should_matchパラメータを使用して設定できます。申し訳ありませんが、私は自分の答えを編集する必要があります。 – Artholl