2017-01-11 128 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请求同样的事情。 当找到其中一个元素(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

确定什么是'should'? –

+0

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-bool-query.html:“\t 子句(查询)应出现在匹配文档中在布尔查询。没有必须的或过滤子句,一个或多个应子句必须文件应子句来匹配可以使用minimum_should_match参数来设置的最小数目相匹配。“。对不起,我已经编辑了我的答案,因为“应该”应该用于表达OR! – Artholl