2014-11-15 150 views
0

嘿,我是新來的Elasticsearch,並希望「翻譯」這個SQL查詢:SQL查詢中Elasticsearch

SELECT"*" FROM Results WHERE "Id"=2 AND Number IN (25,27, 29) AND Date BETWEEN Date1 AND Date 2 ORDER BY Date LIMIT 20 

編輯:通過「翻譯」我的意思是我想的SQL語句轉換爲elaticsearch查詢。 我試過,但低於elasticsearch查詢還沒有成型:(

我想做到這一點使用的過濾器,到目前爲止,我有:

{ 
"filtered": { 
    "query": { 
     "match_all": {} 
    }, 
    "filter": { 
     "and": [ 
      { 
       "range": { 
        "date": { 
         "gt": "2008-01-01", 
         "lt": "2014-01-01" 
        } 
       } 
      }, 
      { 
       "term": { 
        "Id": 2 
       } 
      }, 
      { 
       "terms": { 
        "number": [ 
         25, 
         27, 
         29 
        ] 
       } 
      }, 
      { 
      "limit": { 
        "value": 20 
       } 
      } 
     ] 
    } 
} 

}

我讀了文檔,並試圖例子,做簡單的查詢,我希望有人能幫助我解決這個

回答

1

你的搜索看起來不錯! - ?哪一部分工作不

我會用size來限制返回結果的數量(而不是限制檢查文件數量的限制)。 我也加了一個sort

使用過濾器的缺點是它不會進行任何評分 - 可能您應該將Number IN (25,27, 29)部分移到查詢中,然後使用更多匹配的結果會得分更高? 其他字段看起來適合用於過濾器(即二進制匹配/不匹配)。

curl -XGET 'http://localhost:9200/myindex/results/_search?pretty' -d '{ 
    "size" : 20, 
    "sort" : [{"number" : {"order" : "desc"}}], 
    "filter": { 
     "and": [ 
     { 
      "range": { 
       "date": { 
        "gt": "2008-01-01", 
        "lt": "2014-01-01" 
       } 
      } 
     }, 
     { 
      "term": { 
       "Id": 2 
      } 
     }, 
     { 
      "terms": { 
       "number": [ 
        25, 
        27, 
        29 
       ] 
      } 
     } 
    ] 
    } 
}' 
+0

有了您的幫助還挺現在的工作,當我刪除「日期」在我的排序part..otherwise我得到'[找到[日期沒有映射爲了排序]'我整理日期:DATE instaed NUMBER – BokaJakoB

+0

很高興它爲你工作,你能接受一個答案嗎? –