2012-07-23 118 views
3

我有兩個與ElasticSearch相關的問題。ElasticSearch中的排序和最新記錄

1)有沒有什麼方法可以指定我希望特定字段按降序排列的結果? 的equivalt SQL查詢將是:

select * from table1 where a="b" order by myprimarykey desc; 

2)如何獲得第一個和最後(最新)記錄?

回答

8

1)Elasticsearch有相當複雜的Sorting API,允許您控制排序順序。因此,在elasticsearch,一個相當於你的MySQL查詢應該是這樣的:

{ 
    "query" : { 
     "term" : { "a" : "b" } 
    }, 
    "sort" : [ 
     { "myprimarykey" : "desc"} } 
    ] 
} 

也可以在_search URI指定排序。

2)要檢索第一個和最後一個記錄,您需要使用descasc執行兩次搜索,併爲每個記錄檢索一個記錄。可以使用Multi Search API來組合兩個查詢。

+0

關於第二點,我嘗試使用「desc」與「全部匹配」查詢。 但問題是,結果中的「命中」顯示大的記錄數,而不是1.這是否意味着即使我想要1條記錄,所有記錄都正在被掃描,並且正在返回一條記錄?我只需要一個第一個和/或最後一個記錄(對兩個課程使用不同的查詢)。 – 2012-07-26 07:46:25

+0

大記錄數是您的「全部匹配」查詢找到的記錄數。所以,是的,它會查找所有記錄並只檢索一個記錄,但這並不意味着它使用SQL術語進行全表掃描。這是相當輕量級的過程。 – imotov 2012-07-26 13:32:45

+0

好的。最後一件事..如果我的索引中有幾百萬條記錄,性能是否會受到上述查詢的影響? – 2012-07-28 08:33:35