空搜索
搜索API的最基礎的形式是沒有指定任何查詢的空搜索 ,它簡單地返回集群中所有索引下的所有文檔,如下命令:
GET /_search
返回如下結果:
查詢結果解釋:
1,hits
返回結果中最重要的部分是 hits ,它 包含 total 字段來表示匹配到的文檔總數,並且一個 hits 數組包含所查詢結果的前十個文檔。
2,took
took 值告訴我們執行整個搜索請求耗費了多少毫秒。
3,timeout
timed_out 值告訴我們查詢是否超時。默認情況下,搜索請求不會超時。 如果低響應時間比完成結果更重要,你可以指定 timeout 為 10 或者 10ms(10毫秒),或者 1s(1秒)。以下命令:
GET /_search?timeout=10ms
查詢字符串
查詢字符串搜索非常適用於通過命令行做即席查詢,比如我們的需求是:
- system_code字段包含Ubtrip。
- message字段包含雲凱或者本京。
所以查詢字符串為:?q=system_code:Ubtrip+message:(雲凱 本京),所以完整的查詢命令為:
GET /log/debuglog/_search?q=system_code:Ubtrip+message:(雲凱 本京)
查詢表達式
相較查詢字符串,查詢表達式更靈活,更強大。
一個查詢表達式的典型結構為:
{
QUERY_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
如果是針對某個字段,那么它的結構為:
{
QUERY_NAME: {
FIELD_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
}
比如:使用查詢表達式來查詢所有數據,使用到了match_all查詢,表達式命令為:
GET /log/debuglog/_search { "query": { "match_all": {} } }
查詢結果為:
比如:我要查詢system_code字段包含Ubtrip的數據,使用到了match查詢,查詢表達式語句為:
GET /log/debuglog/_search { "query": { "match": { "system_code": "Ubtrip" } } }
查詢結果為: