2014-02-20 49 views
1

我是Elasticsearch的新手。我不认为我完全理解查询和过滤器的概念。在我的情况下,我只想使用过滤器,因为我不想使用评分等高级功能。Elasticsearch来自SQL语句的DSL查询

如何将以下SQL语句转换为elasticsearch查询?

select * from tablename where (name="d" and time>1231312) or (name="ds" and time>21) 

回答

5
{ 
    "filter" : { 
     "or":[ 
      { "and" : [ 
        {"range": {"time": {"gt": 1231312}}}, 
       {"term" : {"name":"d"}} 
      ]}, 

      { "and" : [ 
        {"range": {"time": {"gt": 21}}}, 
       {"term" : {"name":"ds"}} 
      ]} 

     ] 

    } 
} 
1

以下是查询DSL相当于您的SQL查询。 query_string/query过滤器默认情况下没有缓存,这就是为什么我使用_cache:true性能明智,它会工作良好。

curl -XPOST http://localhost:9200/index_name/_search '{ 
    "filter": { 
     "or": { 
     "filters": [ 
      { 
       "fquery": { 
        "query": { 
        "bool": { 
         "must": [ 
          { 
           "term": { 
           "name": "d" 
           } 
          }, 
          { 
           "range": { 
           "time": { 
            "gte":1231312 
           } 
           } 
          } 
         ] 
        } 
        }, 
        "_cache": true 
       } 
      }, 
      { 
       "fquery": { 
        "query": { 
        "bool": { 
         "must": [ 
          { 
           "term": { 
           "name": "ds" 
           } 
          }, 
          { 
           "range": { 
           "time": { 
            "gte":21 
           } 
           } 
          } 
         ] 
        } 
        }, 
        "_cache": true 
       } 
      } 
     ] 
     } 
    } 
}' 
+0

你有没有试过这种查询? – Roopendra