一、查看、创建索引

创建一个名字为user索引:

curl -X PUT 'localhost:9200/stu'

{"acknowledged":true,"shards_acknowledged":true,"index":"stu"}

二、查看索引:http://192.168.56.101:9200/_cat/indices?v IP地址请修改为自己的IP

pri:分片数量 rep:副本集

三、删除索引

curl -X DELETE 'localhost:9200/stu'

{"acknowledged":true}

四、安装ik6.2.2分词器,注意ik的版本最好跟es的版本保持一致

cd /

/usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.2/elasticsearch-analysis-ik-6.2.2.zip

重新启动elasticsearch

systemctl restart elasticsearch

测试IK中文分词器是否安装成功

curl -XGET -H 'Content-Type: application/json' 'http://localhost:9200/_analyze?pretty' -d '{ "analyzer" : "ik_max_word", "text": "中华人民共和国国歌" }'

返回json

{
"tokens" : [
{ "token" : "中华人民共和国", "start_offset" : 0, "end_offset" : 7, "type" : "CN_WORD", "position" : 0 },
{ "token" : "中华人民", "start_offset" : 0, "end_offset" : 4, "type" : "CN_WORD", "position" : 1 },
{ "token" : "中华", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 2 },
{ "token" : "华人", "start_offset" : 1, "end_offset" : 3, "type" : "CN_WORD", "position" : 3 },
{ "token" : "人民共和国", "start_offset" : 2, "end_offset" : 7, "type" : "CN_WORD", "position" : 4 },
{ "token" : "人民", "start_offset" : 2, "end_offset" : 4, "type" : "CN_WORD", "position" : 5 },
{ "token" : "共和国", "start_offset" : 4, "end_offset" : 7, "type" : "CN_WORD", "position" : 6 },
{ "token" : "共和", "start_offset" : 4, "end_offset" : 6, "type" : "CN_WORD", "position" : 7 },
{ "token" : "国", "start_offset" : 6, "end_offset" : 7, "type" : "CN_CHAR", "position" : 8 },
{ "token" : "国歌", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 9 }
]
}

五、设置索引

假设这个是我们的数据结构,数据类型覆盖还是比较全

stu:索引名称

person:Type名称

analyzer:字段文本分词器 ,默认是analyzed

search_analyzer:搜索分词器,默认是analyzed

ik_max_word:中文分词器

curl -XGET -H 'Content-Type: application/json' 'http://127.0.0.1:9200/stu' -d '
{
"mappings": {
"person": {
"dynamic":true,
"dynamic_date_formats":["yyyy-MM-dd hh:mm:ss", "yyyy-MM-dd" ],
"properties": {
"id": { "type": "integer", "store":true },
"name": { "type": "text", "store": true },
"cname": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "store": true },
"age": { "type": "integer" },
"score": { "type": "float" },
"email": { "type": "text", "store":true },
"birthday": { "type": "date", "format":"yyyy-MM-dd","store":true },
"regdate": { "type": "date", "format":"yyyy-MM-dd hh:mm:ss","store":true },
"city": { "type": "keyword", "analyzer": "keyword", "store":true },
"address": { "type": "text", "analyzer": "ik_max_word" }
}
}
}
}'

六、新增数据

curl -XPOST -H 'Content-Type: application/json' '127.0.0.1:9200/stu/person' -d '
{
"id": "11",
"name": "zhang san",
"cnname": "张三",
"age": 20,
"score":80.8,
"email":"zhang.san@163.com",
"birthday":"2000-03-03",
"regdate":"2018-03-03T15:33:33Z",
"city":"PEK",
"address":"上海市闸北区保德路389号"
}'

'127.0.0.1:9200/stu/person' 不指定的话会分配一个ID,如下"_id":"aiO0EWIB1IWtAj8my_8s"

{"_index":"stu","_type":"person","_id":"aiO0EWIB1IWtAj8my_8s","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

注意:以下参数如果在person后指定id=abc123的话会根据这个ID更新或者新增数据,result=created/updated

curl -XPOST -H 'Content-Type: application/json' '127.0.0.1:9200/stu/person/abc123' -d '
{
"id": "111",
"name": "li si",
"cnname": "李四",
"age": 21,
"score":98.9,
"email":"lisi@qq.com",
"birthday":"2008-03-03",
"regdate":"2019-03-03T15:33:33Z",
"city":"SHA",
"address":"江苏省苏州市园区现代大道188号"
}'
{"_index":"stu","_type":"person","_id":"abc123","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

六、删除数据

指定具体的_id删除

curl -X DELETE 'localhost:9200/stu/person/Dpts-2EBY6Wnp0_K3NkH'

根据Query DSL删除,参考语法官方:Delete By Query API

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/stu/person/_delete_by_query?pretty' -d '
{
"query": {
"bool":{
"filter": [
{"term":{ "city": "pek" }}
]
}
}
}'

七、修改数据

注意:更新操作会重新更新索引

  1. 带ID全部字段更新(参考上面带ID新增数据,同样的道理)

    略...
  2. 带ID部分字段更新 Elasticsearch Reference [6.2] » Document APIs » Update API

    注意doc和script不能同时在一次请求里POST

    更新id=abc123设置name="lisi" ,并新增一个属性 "bugs": 0
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/stu/person/abc123/_update?pretty' -d '
{
"doc" : {
"name" : "lisi",
"bugs": 0
}
}'



更新id=abc123设置年龄+=4

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/stu/person/abc123/_update?pretty' -d '
{
"script" : {
"source": "ctx._source.age += 4"
}
}'



3. _update_by_query根据条件更新 Elasticsearch Reference [6.2] » Document APIs » Update By Query API

在不更新源文件的情况下根据index更新文档,也可以用于新增字段属性

_update_by_query支持script,如果script和doc同时存在会忽略doc

_update_by_query在执时候快照内部索引,当文档生成快照是document正则变更的话将会发生版本冲突,否则的话会更新版本号

0不是一个有效的版本号,因此版本号为0不支持_update_by_query更新

所有的更新和查询失败都会终止,如果只是想进行简单的类似计数器类的功能可以在请求参数里加conflicts=proceed重新尝试更新

URL参数

除了标准的pretty参数外,Update_By_Query还可以支持refresh, wait_for_completion, wait_for_active_shards, timeout and scroll

refresh:URL发送refresh参数会在update完之后更新所有分片的索引,与Index API中的refresh不一样的是只会接受新数据进行索引

wait_for_completion:如果请求中包含wait_for_completion=false,则会进行与检查启动request返回一个task,可以被Index API取消或者查看状态

wait_for_active_shards:控制在处理请求之前必须激活多少个分片副本

timeout:设置分片的从不可用变成可用的时间,

scroll:由于Update_By_Query会进行所有上下文检索,默认时间是5分钟,实例 ?scroll=10m 修改为10分钟

requests_per_second:设置一个正整数,控制等待时间内每个批次操作索引的数量

完整实例:
GET stu/_update_by_query?pretty&conflicts=proceed&refresh=true&timeout=1s
{
"script": {
"source": "ctx._source.name=\"lisi2\";ctx._source.bugs=10"
},
"query": {
"bool": {
"filter": [
{"term": { "id": "111" } }
]
}
}
}
下面错误示范:无法更新bugs。
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/stu/person/_update_by_query?conflicts=proceed&pretty' -d '
{
"script": {
"source": "ctx._source.age++",
"bugs": 10
},
"query": {
"bool":{
"filter": [
{"term":{ "id": "111" }},
{"term":{ "name": "lisi" }}
]
}
}
}'

八、查询数据

查询部分请参考 elasticsearch入门使用(三) Query DSL

elasticsearch入门使用(四) 索引、安装IK分词器及增删改查数据的更多相关文章

  1. Linux使用Docker启动Elasticsearch并配合Kibana使用,安装ik分词器

    注意事项 这里我的Linux虚拟机的IP地址是192.168.1.3 Docker运行Elasticsearch容器之后不会立即有反应,要等一会,等待容器内部启动Elasticsearch,才可以访问 ...

  2. Linux下,非Docker启动Elasticsearch 6.3.0,安装ik分词器插件,以及使用Kibana测试Elasticsearch,

    Linux下,非Docker启动Elasticsearch 6.3.0 查看java版本,需要1.8版本 java -version yum -y install java 创建用户,因为elasti ...

  3. Elasticsearch入门之从零开始安装ik分词器

    起因 需要在ES中使用聚合进行统计分析,但是聚合字段值为中文,ES的默认分词器对于中文支持非常不友好:会把完整的中文词语拆分为一系列独立的汉字进行聚合,显然这并不是我的初衷.我们来看个实例: POST ...

  4. 【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器

    系列文章:[建议从第二章开始] [ELK][docker][elasticsearch]1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安 ...

  5. Elasticsearch下安装ik分词器

    安装ik分词器(必须安装maven) 上传相应jar包 解压到相应目录 unzip elasticsearch-analysis-ik-master.zip(zip包) cp -r elasticse ...

  6. windows下elasticsearch安装ik分词器后无法启动

    windows下elasticsearch安装ik分词器后启动报如下图错误: 然后百度说是elasticsearch路径有空格,一看果然我的路径有空格,然后重新换个路径就好了.

  7. 如何开发自己的搜索帝国之安装ik分词器

     Elasticsearch默认提供的分词器,会把每个汉字分开,而不是我们想要的根据关键词来分词,我是中国人 不能简单的分成一个个字,我们更希望 “中国人”,“中国”,“我”这样的分词,这样我们就需要 ...

  8. Elastic Stack 笔记(二)Elasticsearch5.6 安装 IK 分词器和 Head 插件

    博客地址:http://www.moonxy.com 一.前言 Elasticsearch 作为开源搜索引擎服务器,其核心功能在于索引和搜索数据.索引是把文档写入 Elasticsearch 的过程, ...

  9. ElasticSearch5.3安装IK分词器并验证

    ElasticSearch5.3安装IK分词器 之前使用Elasticsearch安装head插件成功了,但是安装IK分词器却失败了.貌似是ElasticSearch5.0以后就不支持直接在elast ...

随机推荐

  1. CPP-基础:strcpy之于C++(

    以下对strcpy函数错误的是? char atr1[]="string"; ]; char *str3; char *str4="sting"; A.strc ...

  2. hibernate的注解

    1.many-to-one @ManyToOne @JoinColumn(name = "user_id") 2.many-to-many /** * 双向关联关系中,有且仅有一端 ...

  3. C#值类型和引用类型与Equals方法

    1. C#的值类型和引用类型 C#的对象里面有两种类型,一个是引用类型,一个是值类型,值类型和引用类型的具体分类可以看下面的分类.   在C#中,不管是引用类型还是值类型,他们都隐式继承Object类 ...

  4. LeetCode 最长连续递增序列

    给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3. 尽管 [1,3,5,7] 也 ...

  5. (25)zabbix事件通知

    概述 我们前面花了大量时间去讲解item.trigger.event都是为发送报警做准备的,什么是事件通知呢?简单的说故障发生了,zabbix会发邮件或者短信给你,告诉你服务器的一些状况. 如果没有通 ...

  6. element使用心得

    Table Table 常用属性解释 数据过滤,filter过滤器 <el-table-column width="200" show-overflow-tooltip la ...

  7. 如何快速获取当前链接?后面的内容,location.search、页面滚动

    function request() { var urlStr = location.search; ) { theRequest={}; return; } urlStr = urlStr.subs ...

  8. mem之读操作调式总结(跟入栈出栈有关)

    现象: 1.当case比较复杂的时候(含有for循环对mem进行读/写) 发现for循环时总是有汇编指令不执行跳过去了,(其实是汇编不熟和指令太多无法理智分析指令了). 事实是指令是对的,但执行错了( ...

  9. python上的数据库sqlite3——插入多行数据

    学校课程上的一个知识点,一个简单的课后习题:一劳永逸实现多行数据的插入(应该是这个意思,老师也没讲清楚).直接上代码了没啥好讲的,我感觉这个思路好捞. import sqlite3 con = sql ...

  10. [译]The Python Tutorial#9. Classes

    写在前面 本篇文章是<The Python Tutorial>(3.6.1),第九章,类的译文. 9. Classes 与其他编程语言相比,Python的类机制定义类时,最小化了新的语法和 ...