Elasticsearch 2.20入门篇:查询操作

基本查询

上篇文章中,我们介绍了简单的查询。在Elasticsearch中有两种最基本的查询方式:

1、通过REST请求把搜索参数放到请求的URL中。

2、另一种是通过个REST请求,把请求参数放到请求的body中。

第二种方式可以以JSON的方式进行提交搜索,更有利于阅读。

第一种方式的搜索需要在URL中指定_search参数。

例如:GET localhost:9200/customer/_search?q=*&pretty

这个搜索可以得出customer中的所有文档。

解释一下:_search是搜索的关键字,q=*表示搜索所有文档,&pretty表示输出的结果是经过格式化后的,这样阅读起来更直观。

下面是我这里返回的结果:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "customer",
      "_type" : "external",
      "_id" : "1",
      "_score" : 1.0,
      "_source" : {
        "name" : "secisland Doe"
      }
    }, {
      "_index" : "customer",
      "_type" : "external",
      "_id" : "3",
      "_score" : 1.0,
      "_source" : {
        "name" : "John Doe"
      }
    } ]
  }
}

关键内容解释如下:

took: Elasticsearch执行搜索的时间,以毫秒为单位。

timed_out:告诉我们这次搜索是否超时。

_shards:告诉我们这次的搜索在多少个分片中进行了查找,搜索成功或者失败分片的个数。

hits:搜索的具体结果。

hits.total:根据搜索条件匹配的文件总数。

hits.hits:实际搜索的文档内容(默认为搜索前10个文档)。

_score和max_score是搜索结果匹配相关度的数值,这个在后面会详细解释。

下面我们用第二种方法进行搜索:

请求:POST localhost:9200/bank/_search?pretty

参数:

{
  "query": { "match_all": {} }
}

返回的结果和第一种查询的内容一模一样。

这两个查询的区别是:

第一种是GET请求,在URL中传递q=*参数:

第二种是POST请求,在body中通过JSON格式的进行查询。

需要注意的是,Elasticsearch的查询和数据的查询在后台是不一样的,对于数据库后台查询保留了游标等信息方便进一步的查询,Elasticsearch查询是一次完全独立的查询,后面没有保留任何信息。

本文由赛克蓝德(secisland)原创,转载请标明作者和出处。

Query DSL

    Elasticsearch提供JSON风格的特定领域语言(domain-specific language 简称DSL),可以使用DSL执行查询。Elasticsearch这种特定领域语言查询简称Query DSL。这种查询的功能非常强大。下面通过例子进行介绍。

我们看一下上面的第二个查询的例子:

{
  "query": { "match_all": {} }
}

    对上面的内容进行分析,我们定义了一个简单的查询,是匹配所有内容的查询条件。match_all表示在指定的索引中搜索全部的文档。除了query参数,我们还可以通过其他参数来影响搜索结果。例如,以下是一个match_all并且只返回第一个文档:

{
  "query": { "match_all": {} },
  "size": 1
}

    注意:如果没有指定size参数,则默认为10。

    下面的例子我们进行match_all匹配并返回第11条到20条的文档:

{
  "query": { "match_all": {} },
  "from": 10,
  "size": 10
}

    参数from指定的索引文件从哪一条开始,size参数指定需要返回多少条文档。这种搜索条件长用在分页搜索的情况下。注意:如果from参数没有指定,默认为0。

    下面的例子match_all匹配所有的文档,同时对balance进行了降序排序,返回经过排序后的前10条文档。

{
  "query": { "match_all": {} },
  "sort": { "balance": { "order": "desc" } }
}

赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待,也欢迎加入secisland公众号进行关注。

你可能感兴趣的:(elasticsearch,日志分析,secilog,赛克蓝德)