弹性搜索SQL等效

时间:2017-01-11 09:03:44

标签: mysql sql search elasticsearch lucene

我在使用elasticsearch查询时遇到了一些问题。所以基本上我想知道弹性搜索的sql等价物。

这个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 

*仅作为示例

1 个答案:

答案 0 :(得分:1)

使用布尔查询(和嵌套的布尔查询)允许您表达与sql请求相同的内容。 当查找其中一个元素(OR)时,将验证术语查询。

POST / index_name / people / _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"
         }
      }
   ]
}