下载后在config/kibana.yml位置修改 elasticsearch.hosts=127.0.0.1:9200,让后运行bin\kibana.bat启动,浏览器打开http://localhost:5601就可以访问Kibana了。

二、Elasticsearch的基本操作:

在kibana后台集成了Elasticsearch的客户端工具:

kibana怎么搜索es日志_Elastic

 

1、索引操作

 创建索引:

PUT /customer?pretty

 列出索引:

GET /_cat/indices?v

 删除索引:

DELETE /customer?pretty

获取文档:

GET /customer/doc/1?pretty

 修改数据:

 Elasticsearch提供近乎实时的数据处理和搜索功能。默认情况下,从索引/更新/删除数据到显示在搜索结果中的时间可能会有一秒钟的延迟(刷新间隔)。这是与其他平台(如SQL)的重要区别,在其他平台上,数据在事务完成后立即可用。

执行下述命令,Elasticsearch将替换(即重新索引)一个新文档。

PUT /customer/doc/1?pretty
{
  "name": "John Doe"
}

  更新文档:

除了能够索引和替换文档之外,我们还可以更新文档。请注意,尽管Elasticsearch实际上并未在后台进行就地更新。每当我们进行更新时,Elasticsearch都会删除旧文档,然后在一个快照中将应用了更新的新文档编入索引。

POST /customer/doc/1/_update?pretty
{
  "doc": { "name": "Jane Doe", "age": 20 }
}

 用简单的脚本执行更新:

POST /customer/doc/1/_update?pretty
{
  "script" : "ctx._source.age += 5"
}

 删除文档:

DELETE /customer/doc/2?pretty

 批量操作:

除了能够索引,更新和删除单个文档之外,Elasticsearch还提供了使用bulkAPI 批量执行上述任何操作的功能。此功能很重要,因为它提供了一种非常有效的机制,可以以尽可能少的网络往返次数来尽可能快地执行多项操作。

以下调用在一个批量g更新两个文档(ID 1-John Doe和ID 2-Jane Doe)

POST /customer/doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }

 本示例在一个批量操作中更新第一个文档(ID为1),然后删除第二个文档(ID为2):

POST /customer/doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}

 三、Elasticsearch的查询

1、查询入门:

您可以从此处下载示例数据集(accounts.json)。将其解压缩到当前目录,然后在控制台执行如下指令将其加载到集群中(我使用的是git bash控制台),如下所示:

curl -H "Content-Type: application/json" -XPOST 'localhost:9200/bank/account/_bulk?pretty&refresh' --data-binary "@accounts.json"
curl 'localhost:9200/_cat/indices?v'

 两种查询结构:

//第一种参数形式
GET /bank/_search?q=*&sort=account_number:asc&pretty
//请求报文体
GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ]
}

 对于响应,我们看到以下部分:

  • took – Elasticsearch执行搜索的时间(以毫秒为单位)
  • timed_out –告诉我们搜索是否超时
  • _shards –告诉我们搜索了多少个分片,以及成功/失败的搜索分片的数量
  • hits - 搜索结果
  • hits.total –符合我们搜索条件的文件总数
  • hits.hits –搜索结果的实际数组(默认为前10个文档)
  • hits.sort -结果的排序键(如果按得分排序则丢失)
  • hits._score并且max_score-现在暂时忽略这些字段

2、查询语言:

//query部分告诉我们查询定义是什么,而该match_all部分只是我们要运行的查询的类型。该match_all查询只是搜索指定索引中的所有文档。
GET /bank/_search
{
  "query": { "match_all": {} }
}
//size指定搜索结果返回的记录数,如果size未指定,则默认为10
GET /bank/_search
{
  "query": { "match_all": {} },
  "size": 1
}
//返回10到19的文档,from(从0开始)参数规定了从启动该文件的索引和size参数指定了多少文件,返回从参数开始的。实现分页搜索结果时,此功能很有用。请注意,如果from未指定,则默认为0。
GET /bank/_search
{
  "query": { "match_all": {} },
  "from": 10,
  "size": 10
}
//sort为排序
GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": { "balance": { "order": "desc" } }
}

 指定返回的字段

GET /bank/_search
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}

 基本的字段搜索查询(即,针对特定字段或一组字段进行的搜索)

此示例返回编号为20的帐户:

GET /bank/_search
{
  "query": { "match": { "account_number": 20 } }
}

 本示例返回地址中包含术语“ mill”的所有帐户:

GET /bank/_search
{
  "query": { "match": { "address": "mill" } }
}

   本示例返回地址中包含术语“ mill”或“ lane”的所有帐户: 

GET /bank/_search
{
  "query": { "match": { "address": "mill lane" } }
}

此示例是matchmatch_phrase)的一种变体,它返回地址中包含短语“ mill lane”的所有帐户:

GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}

本示例组成两个match查询,并返回地址中包含“ mill”和“ lane”的所有帐户,相当于and:

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}

此示例组成两个match查询,并返回地址中包含“ mill”或“ lane”的所有帐户,相当于or:

GET /bank/_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}

本示例组成两个match查询,并返回地址中既不包含“ mill”也不包含“ lane”的所有帐户:

GET /bank/_search
{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}

 我们可以在查询中同时组合mustshouldmust_not子句bool。此外,我们可以在任何这些bool子句中编写查询,以模仿任何复杂的多级布尔逻辑。

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}

 3、过滤查询:

在上一节中,我们跳过了一个称为文档评分(_score搜索结果中的字段)的小细节。分数是一个数值,是文档与我们指定的搜索查询匹配程度的相对度量。得分越高,文档越相关,得分越低,文档越不相关。

但是查询并不总是需要产生分数,特别是当它们仅用于“过滤”文档集时。Elasticsearch会检测到这些情况并自动优化查询执行,以免计算无用的分数。

我们在上一节中介绍的bool查询还支持filter子句,这些子句允许使用查询来限制其他子句将匹配的文档,而无需更改分数的计算方式(不影响分数)。作为示例,让我们介绍一下Rang Query,它允许我们按一定范围的值过滤文档。通常用于数字或日期过滤。

本示例使用布尔查询返回所有余额在20000到30000(含)之间的帐户。换句话说,我们要查找余额大于或等于20000且小于或等于30000的帐户。

GET /bank/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}

    剖析以上内容,布尔查询包含一个match_all查询(查询部分)和一个range查询(过滤器部分)。我们可以将任何其他查询替换为查询和过滤器部分。在上述情况下,范围查询非常有意义,因为落入该范围的文档都“相等”匹配,即,没有文档比另一个文档更相关。

除了match_allmatchbool,和range查询,有很多可用的其他查询类型的,我们不会进入他们在这里。既然我们已经对它们的工作原理有了基本的了解,那么在学习和尝试其他查询类型时应用这些知识应该不会太困难。

 4、聚合查询:

       汇总功能可以对数据进行分组和提取统计信息。考虑聚合的最简单方法是将其大致等同于SQL GROUP BY和SQL聚合函数。在Elasticsearch中,您可以执行搜索以返回匹配结果,同时在一个响应中返回与匹配结果分开的汇总结果。从某种意义上说,这是非常强大和高效的,您可以运行查询和多次聚合,并一次性获得两个(或两个)操作的结果,从而避免使用简洁的简化API进行网络往返。

本示例是对state字段聚合,默认返回前10条并且按数量降序排序:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}

请注意,我们设置size=0为不显示搜索结果,因为我们只想查看响应中的汇总结果。

在上一个汇总的基础上,此示例按州计算平均帐户余额(同样,仅对按计数降序排列的前十个州):

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

 此示例演示了如何按年龄段(20-29、30-39和40-49岁)分组,然后按性别分组,然后最终获得按年龄段分组,按性别分组的平均帐户余额:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_age": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 20,
            "to": 30
          },
          {
            "from": 30,
            "to": 40
          },
          {
            "from": 40,
            "to": 50
          }
        ]
      },
      "aggs": {
        "group_by_gender": {
          "terms": {
            "field": "gender.keyword"
          },
          "aggs": {
            "average_balance": {
              "avg": {
                "field": "balance"
              }
            }
          }
        }
      }
    }
  }
}