空搜索
搜索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"
}
}
}
查询结果为: