windows系统中 利用kibana创建elasticsearch索引等操作
elasticsearch之借用kibana平台创建索引
1.安装好kibana平台 确保kibana以及elasticsearch正常运行
2.打开kibana平台在Dev Tools
3.创建一个customer索引
PUT /customer?pretty
4.查看该索引
GET /_cat/indices?v
看到结果
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open customer 95SQ4TSUT7mWBT7VNHH67A 5 1 0 0 260b 260b
则说明创建成功
elasticsearch之创建文档并查询
1.在已存在的环境
2.打开kibana后台
创建一个type为external并向第一个文档写入数据
PUT /customer/external/1?pretty
{
"name": "John Doe"
}
返回结果
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : true
}
从上面的返回结果看出 已经成功创建了一个customer的索引并且外部类型为external,我们指定的id为1的客户文档
需要注意一点,假如你没有事先创建customer索引而是直接put 一条数据,elasticsearch会自动创建一个customer索引并添加该数据
查询已写入的数据
GET /customer/external/1?pretty
返回结果
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : { "name": "John Doe" }
}
elasticsearch之删除索引
1.在已有的环境
2.执行删除索引
DELETE /customer?pretty
返回结果
{
"acknowledged": true
}
3.检测删除是否存在
GET /_cat/indices?v
返回结果
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana Ybk3WcSvSsC9bHQkJovxdA 1 1 1 0 3.1kb 3.1kb
则说明已经删除成功
回忆一下刚才所学
PUT /customer
PUT /customer/external/1
{
"name": "John Doe"
}
GET /customer/external/1
DELETE /customer
即可发现 这个规律
put /index/type/id
get /index/type/id
delete /index
elasticsearch之修改替换文档
Elasticsearch提供近乎实时的数据操作和搜索功能。默认情况下,您可以从 index/update/delete 数据的时间延迟一秒钟的延迟(刷新间隔),直到它在搜索结果中出现的时间。这是它与其他平台(如SQL)的重要区别,其中数据在事务完成后立即可用。
Index/Update
我们需要更新文档,首先添加一个文档
PUT /customer/external/1?pretty
{
"name": "John Doe"
}
然后对该文档进行更新
PUT /customer/external/1?pretty
{
"name": "Jane Doe"
}
然后进行查看
GET /customer/external/1?pretty
发现其已经被修改
若我们使用不同的id添加数据时,则会添加新的文档2
PUT /customer/external/2?pretty
{
"name": "Jane Doe"
}
在put时id是必须的,
但是在用post添加数据时id是可选的,添加一条数据不指定id,系统会自动生成一个id给予它
POST /customer/external?pretty
{
"name": "Jane Doe"
}
也可指定id进行添加数据
POST /customer/external/1?pretty
{
"name": "Jane Doe"
}
elasticsearch之更新文档
Updating Documents
上一篇中讲述了替换文档,也就是 删除掉老的文档并且添加新的文档
接下来是更新文档
我们将之前的 1 文档的name更新问 Jane Doe
POST /customer/external/1/_update?pretty
{
"doc": { "name": "Jane Doe" }
}
我们再在文档1中一个age更新为20
POST /customer/external/1/_update?pretty
{
"doc": { "name": "Jane Doe", "age":20 }
}
也可以使用简单的脚本来执行更新。此示例使用脚本将年龄增加5
POST /customer/external/1/_update?pretty
{
"script" :"ctx._source.age + = 5"
}
在上面的例子中,ctx._source指的是即将更新的当前源文档。
请注意,在撰写本文时,只能在单个文档上一次执行更新。将来,Elasticsearch可能会提供给予查询条件(如SQL UPDATE-WHERE语句)更新多个文档的功能。
elasticsearch之删除文档
Delete Document
删除文档是比较简单的。此示例显示如何删除我们之前的ID为2的客户
DELETE / customer / external / 2 ?pretty
1
请参阅删除按查询API删除与特定查询匹配的所有文档。值得注意的是,删除整个索引而不是使用“按查询删除”API删除所有文档效率更高。
删除单个文档比较容易,若我们删除多个文档,目前只能通过bulk提交一次删除多个文档,在elasticsearch 2.0版本之前可以批量删除文档,由于批量删除导致全索引扫描,所以在2.0之后去掉了
elasticsearch之批处理
批处理
除了能够索引,更新和删除单个文档之外,Elasticsearch还提供了使用_bulkAPI批量执行上述任何操作的功能。这个功能很重要,因为它提供了一个非常有效的机制来尽可能快地进行多个操作,尽可能少的网络往返行程。
批处理插入的两个文档
POST /customer/external/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
批处理更新和删除之前的文档
POST /customer/external/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
注意,对于删除操作,没有相应的源文档,因为删除只需要要删除的文档的ID。
由于其中一个操作失败,Bulk API不会失败。如果一个动作由于任何原因而失败,它将继续处理其后的其余动作。当批量API返回时,它将为每个操作提供一个状态(按照发送的相同顺序),以便您可以检查特定操作是否失败。
elasticsearch之Search API
现在我们开始一些简单的搜索。
运行检索的一共有两种方式:
一种是通过发送搜索参数REST请求URL,另一种是发送请求主体
1.发送搜索参数REST请求
GET /bank/_search?q=*&sort=account_number:asc&pretty
返回结果
{
"took" : 63,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1000,
"max_score" : null,
"hits" : [ {
"_index" : "bank",
"_type" : "account",
"_id" : "0",
"sort": [0],
"_score" : null,
"_source" : {"account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"bradshawmckenzie@euron.com","city":"Hobucken","state":"CO"}
}, {
"_index" : "bank",
"_type" : "account",
"_id" : "1",
"sort": [1],
"_score" : null,
"_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
}, ...
]
}}
返回结果我们分析下
took - 弹性搜索执行搜索的时间(以毫秒为单位)
timed_out - 告诉我们搜索是否超时
_shards - 告诉我们搜索了多少个分片,以及对成功/失败的搜索分片的计数
hits - 搜索结果
hits.total - 符合我们搜索条件的文件总数
hits.hits - 实际搜索结果数组(默认为前10个文档)
hits.sort - 结果的排序键(如果按分数排序,则丢失)
hits._score和max_score-忽略这些字段现在
2.发送请求主体
GET /bank/_search
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}
两者的区别在于
这里的区别在于,我们不会传递q=*URI,而是向_searchAPI 发送一个JSON样式的查询请求体。我们将在下一节讨论这个JSON查询。
重要的是要明白,一旦您获得了搜索结果,Elasticsearch就完成了该请求,并且不会保留任何类型的服务器端资源或打开游标到您的结果中。这与许多其他平台(如SQL)形成鲜明对比,您可能最初会先查询查询结果的部分子集,然后如果要获取(或浏览)其余部分,则必须不断返回到服务器的结果使用某种有状态的服务器端游标。
elasticsearch之query-----执行Search
执行Search
在之前的讲述中,我们已经学会了一些基本的搜索参数,今天我们来进一步探讨Query DSL。我们先来看看返回的文档中的部分字段。
我们不希望返回所有字段,只返回我们需要的字段
下面例子显示出只返回 account_numer和 balance字段
GET /bank/_search
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}
上面Query方法中,只返回选中的字段,类似于SQL中的select * from table与 select account_number, balance from table等等。
现在我们来看看查询部分
之前我们有了解到match_all是查询匹配所有文档。现在我们介绍一个match查询的新查询形式(即对特定字段或一组字段进行搜索)。
此例返回的账号为20:
GET /bank/_search
{
"query": { "match": { "account_number": 20 } }
}
下面这个例子返回address包含mill的所有账户:
GET /bank/_search
{
"query": { "match": { "address": "mill" } }
}
下面这个例子返回address包含mill或 lane的所有账户:
GET /bank/_search
{
"query": { "match": { "address": "mill lane" } }
}
相比于match,match_phrase匹配词组
下面这个例子返回address包含{ mill lane }这个词组的所有账户:
GET /bank/_search
{
"query": { "match_phrase": { "address": "mill lane" }}
}
接下来介绍bool(ean)query。bool可以将许多个小的查询合并成一个大的查询。
下面这个例子,返回address同时包含mill和lane的所有账户:
GET /bank/_search
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
在上面的例子中,该bool must子句指定文档被认为是匹配的所有查询必须是真的。
相比之下,此示例组成两个match查询,并返回address包含“mill”或“lane”的所有账户:
GET /bank/_search
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
在上面的例子中,该bool should子句指定一个查询的列表,对于一个被认为是一个匹配的文档,它们必须是真的。
此示例组成两个match查询,并返回address中既不包含“mill”也不包含“lane”的所有帐户:
GET /bank/_search
{
"query": {
"bool": {
"must_not": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
在上面的例子中,该bool must_not子句指定一个查询列表,对于一个被认为是一个匹配的文档,这个查询的列表都不是true。
我们可以在查询中同时结合must,,should和must_not子句bool。此外,我们可以bool在任何这些bool子句中撰写查询,以模拟任何复杂的多级布尔逻辑。
此示例返回任何40岁,但不住ID(aho)的人的所有帐户:
GET /bank/_search
{
"query": {
"bool": {
"must": [
{ "match": { "age": "40" } }
],
"must_not": [
{ "match": { "state": "ID" } }
]
}
}
}
windows系统中 利用kibana创建elasticsearch索引等操作的更多相关文章
- 【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
Terraform(全称:Hashicorp Terraform )是一种开源工具,用于预配和管理云基础结构. 它将基础结构编入描述云资源拓扑的配置文件中. 这些资源包括虚拟机.存储帐户和网络接口等. ...
- linux系统中利用vagrant创建虚拟开发环境
Vagrant简介 作为程序员,可能需要同时开发多个项目,使用多种编程语言,需要使用各种操作系统,如果将很多东西放在同一个电脑上,肯定会被各种配置环境搞晕.一个比较好的办法就是每个项目都有一个干净的开 ...
- 关于Linux系统和Windows系统中文件夹的命名规范
Windows系统中. 1.在创建文件夹的时候不能以"."开头(但是文件以多个点开头并且还有其他合法字符的话就是合法的) 但是在windows系统中确实见过以一个点".& ...
- 利用kibana学习 elasticsearch restful api (DSL)
利用kibana学习 elasticsearch restful api (DSL) 1.了解elasticsearch基本概念Index: databaseType: tableDocument: ...
- UEFI+GPT模式下的Windows系统中分区结构和默认分区大小及硬盘整数分区研究
内容摘要:本文主要讨论和分析在UEFI+GPT模式下的Windows系统(主要是最新的Win10X64)中默认的分区结构和默认的分区大小,硬盘整数分区.4K对齐.起始扇区.恢复分区.ESP分区.MSR ...
- Python 编程环境搭建(Windows 系统中)
由于大家普遍使用 Windows 系统,所以本文只介绍 Windows 系统中 Python 环境的安装. 在 Windows 中安装 Python 与安装普通软件没什么差别,下载所需版本的安装包后, ...
- mysql绿色版在windows系统中的启动
mysql绿色版在windows系统中的启动 1.下载mysql免安装版 例如:mysql-5.7.11-winx64 2.修改配置文件,my-default.ini名称改为:my.ini,文件里面的 ...
- 获取Windows系统中的所有可用和在用串口
目的:获取Windows系统中的所有可用和在用串口 方法:注册表查询法 优点:简单.实用.快速.无遗漏,无多余结果. 说明:另外还有8种方法可以枚举串口,但都不如此法. 代码和详细注释如下: //-- ...
- Windows系统中设置Python程序定时运行方法
Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...
随机推荐
- poj_2286 线段树
题目大意 在墙上贴海报,墙壁是由一排连续的瓷砖铺成,海报贴在墙壁上必须占据连续的几块瓷砖,海报可以互相覆盖,问最后可以看见几张海报(未被完全覆盖). 题目分析 墙壁是由连续的一个区间构成,每个海报占据 ...
- Android 内存使用hprof文件打开方法
http://blog.csdn.net/moruihong/article/details/7677128 与C++的内存不同,C++的内存泄露是由于分配了内存给某程序但是又没有回收造成的.Java ...
- 图片上传转base64
代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...
- Suricata规则配置
Suricata 规则配置 IDS/IPS/WAF IPS.IDS和WAF分别是入侵防御系统和入侵检测系统以及WEB应用防火墙的简称,很多人说这些玩意不就是盒子吗已经过时了,其实不是,SIEM其实是有 ...
- Android Activity 半透明效果(Translucent)
本文转自:http://norety.javaeye.com/blog/648725 今天试着做activity半透明的效果,做出来之后才发现想复杂了!很简单的几句就可以实现,不多说了,贴代码! 1. ...
- for update 和 t.rowid的区别
select * from table_name for update; 和 select t.*, t.rowid from table_name t 的区别 前者会对你查询出来的结果加上锁,而后者 ...
- AB压力测试工具
1.安装AB工具: yum install httpd-tools 2.测试: ab -n -c http://localhost.com/ 其中-n表示请求数,-c表示并发数 3.测试结果 [roo ...
- HDCMS留言插件的使用!
HDCMS留言插件,JS简单示例: <img src='{|U:'code'}' onclick='this.src='{|U:'code'}&'+Math.random()' /> ...
- MariaDB快速选择最适合您的需要的存储引擎
1.Xtradb和InnoDB是一个很好的通用事物存储引擎.通常不确定选用何种存储引擎时,Xtradb和InnoDB是最佳的选择. 2.MyISAM和Aria,占用空间小,系统之间容易复制.MyISA ...
- jquery点击事件失效原因和解决办法
在使用jQuery绑定点击事件的时候,有时候会遇到点击无效,这种情况大多出现在动态添加元素的时候 例如:给demo里添加li元素给li绑定点击事件 $("#demo").appen ...