背景
Elasticsearch 不像關系型數據庫,沒有簡易的 SQL 用來查詢數據,只能通過調用 RESTful API 實現查詢。大體上查詢分為兩種,基於 URL 的和基於請求主體的。基於 URL 的方式比較簡單清晰,用得較多,在這簡單記錄下。
基本模式
基於 URL 的搜索請求基本模式如上圖所示:
1,是一個 Linux curl 命令,利用命令行的方式發起一個 HTTP 命令;
2,則是url路徑,指明搜索范圍,比如上圖所指的搜索范圍就是 get-together 索引下的 group 類型;
3,是 _search 端點(Endpoint),表明這是一個搜索請求;
4,傳入一個 pretty參數,美化(格式化)返回結果,非必填。
運行該條命令后,會查詢出get-together 索引下的 group 類型下的所有文檔。
q
q 參數用於指定搜索的關鍵詞
# 搜索 get-together 索引,group 類型中,包含“elasticsearch”的文檔 curl -X GET 'localhost:9200/get-together/group/_search?pretty&q=elasticsearch' # 搜索 get-together 索引,group 類型中,屬性 description 包含“elasticsearch”的文檔 curl -X GET 'localhost:9200/get-together/group/_search?pretty&q=description:elasticsearch'
from & size
假設某個搜索請求會返回一大批文檔,出於網絡性能的考慮,往往不需要全部返回,所以可以使用 from,size 來達到限制結果集數量的目的。from 指定起始,size 指定起始后多少條文檔,比如 from=0,size=2,表明從第0條開始返回,最多返回兩條文檔,如下所示。
curl -X GET 'localhost:9200/get-together/group/_search?pretty&from=0&size=2'
size如果不指定,默認為10
sort
對結果排序,默認是降序,可以利用 asc,desc 表明是升序還是降序,另外除了對文檔屬性值進行排序,還可以對文檔的評分進行排序
# 對 created_on 字段進行排序,利用asc,desc指明是升序還是降序 curl -X GET 'localhost:9200/get-together/group/_search?pretty&sort=created_on:asc' curl -X GET 'localhost:9200/get-together/group/_search?pretty&sort=created_on:desc' # 對文檔的評分進行排序 curl -X GET 'localhost:9200/get-together/group/_search?pretty&q=elasticsearch&sort=_score'
_source
或出於網絡性能,或出於結果清晰,往往只關注文檔的某幾個屬性。我們可以使用 _source 來指明只返回哪些屬性
curl -X GET 'localhost:9200/get-together/group/_search?pretty&_source=organizer,description'
引用
1.《Elasticsearch 實戰》- Radu Gheorghe