Elasticsearch系列(4):基本搜索

空搜索

搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档,如下命令:

GET /_search

返回如下结果:

image

查询结果解释:

1,hits

返回结果中最重要的部分是 hits ,它 包含 total 字段来表示匹配到的文档总数,并且一个 hits 数组包含所查询结果的前十个文档。

2,took

took 值告诉我们执行整个搜索请求耗费了多少毫秒。

3,timeout

timed_out 值告诉我们查询是否超时。默认情况下,搜索请求不会超时。 如果低响应时间比完成结果更重要,你可以指定 timeout 为 10 或者 10ms(10毫秒),或者 1s(1秒)。以下命令:

GET /_search?timeout=10ms

查询字符串

查询字符串搜索非常适用于通过命令行做即席查询,比如我们的需求是:

  1. system_code字段包含Ubtrip。
  2. 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": {}
  }
}

查询结果为:

image

比如:我要查询system_code字段包含Ubtrip的数据,使用到了match查询,查询表达式语句为:

GET /log/debuglog/_search
{
  "query": {
    "match": {
      "system_code": "Ubtrip"
    }
  }
}

查询结果为:

image

原文地址:https://www.cnblogs.com/mcgrady/p/9025990.html