在线查看网站源码,网站建设合同有哪些,2345网址导航怎么关,asp.net做学校网站首页目录
一、 概述
二、创建索引
三、查询索引
四、删除索引
五、修改索引
六、批量操作
6.1 批量写入
6.2 批量创建文档create
6.3 普通创建或全量替换index
6.4 批量删除delete 6.5 批量修改update
6.6 组合应用
6.7 批量读取 一、 概述 es的操作是基于 Restful 风格…目录
一、 概述
二、创建索引
三、查询索引
四、删除索引
五、修改索引
六、批量操作
6.1 批量写入
6.2 批量创建文档create
6.3 普通创建或全量替换index
6.4 批量删除delete 6.5 批量修改update
6.6 组合应用
6.7 批量读取 一、 概述 es的操作是基于 Restful 风格的 API 操作请求体则是 Json 格式。
二、创建索引
格式: PUT /索引名称
索引命名规范
以小写英文字母命名索引不要使用驼峰命名法则如过出现多个单词的索引名称以全小写 下划线分隔的方式如test_index。
ES 索引创建成功之后以下属性将不可修改
索引名称主分片数量字段类型
# 简单创建索引
PUT /es_db# 插入数据自动创建索引
PUT /user/_doc/1
{name:fox,age:32,address:长沙麓谷
}# 静态映射创建索引
PUT /user
{settings: {number_of_shards: 1,number_of_replicas: 1},mappings: {properties: {name: {type: keyword},age : {type : long},address : {type : text}}}
}
备注es的索引并不像关系型数据库一样需要提前定义。它在PUT数据的过程中会动态生成索引的映射如果后续PUT过程中有新的字段需要保存它同样会动态添加新字段的映射
三、查询索引
格式: GET /索引名称
# 查询索引
GET /es_db# es_db是否存在
HEAD /es_db# match 匹配查询会对查询文本分词后匹配
GET /es_db/_search
{query: {match: {address: 广州白云}}
}# term 词项查询属于精确查询不会对查询文本分词
GET /es_db/_search{query: {term: {address: 广州白云}}}#通过URI搜索使用“q”指定查询字符串“query string syntax” KV键值对#条件查询, 如要查询age等于28岁的 _search?q*:***
GET /es_db/_doc/_search?qage:28#范围查询, 如要查询age在25至26岁之间的 _search?q***[** TO **] 注意: TO 必须为大写
GET /es_db/_doc/_search?qage[25 TO 26]#查询年龄小于等于28岁的 :
GET /es_db/_doc/_search?qage:28
#查询年龄大于28前的 :
GET /es_db/_doc/_search?qage:28#分页查询 from*size*
GET /es_db/_doc/_search?qage[25 TO 26]from0size1#对查询结果只输出某些字段 _source字段,字段
GET /es_db/_doc/_search?_sourcename,age#对查询结果排序 sort字段:desc/asc
GET /es_db/_doc/_search?sortage:desc
四、删除索引
格式: DELETE /索引名称
DELETE /es_db
五、修改索引
格式: PUT /索引名称
# 创建索引es_db指定其主分片数量为 3每个主分片的副本数量为 2
PUT /es_db
{settings : {number_of_shards : 3,number_of_replicas : 2}
}# 创建索引时可以指定IK分词器作为默认分词器
PUT /es_db
{settings : {index : {analysis.analyzer.default.type: ik_max_word}}
}# 填了id则是修改不填即是新增
POST /es_db/_doc
{name: 张三,sex: 1,age: 25,address: 广州天河公园,remark: java developer
}# 指定id新增数据是全字段的更新相当于删除旧文档重新建新文档
PUT /es_db/_doc/1
{name: 张三,sex: 1,age: 25,address: 广州天河公园,remark: java developer
}# 部分更新在原有文档上更新
# Update -文档必须已经存在更新只会对相应字段做增量修改
POST /es_db/_update/1
{doc: {age: 28}
}# 使用 _update_by_query 更新文档
POST /es_db/_update_by_query
{query: {match: {_id: 1}},script: {source: ctx._source.age 30}
}# 并发场景下修改文档
# _seq_no和_primary_term是对_version的优化7.X版本的ES默认使用这种方式控制版本所以当在
# 高并发环境下使用乐观锁机制修改文档时要带上当前文档的_seq_no和_primary_term进行更新
POST /es_db/_doc/2?if_seq_no21if_primary_term6
{name: 李四xxx
}# 删除文档
DELETE /es_db/_doc/1 注意: POST和PUT都能起到创建/更新的作用PUT需要对一个具体的资源进行操作也就是要确定id才能进行更新/创建而POST是可以针对整个资源集合进行操作的如果不写id就由ES生成一个唯一id进行创建新文档如果填了id那就针对这个id的文档进行创建/更新
六、批量操作 批量操作可以减少网络连接所产生的开销提升性能 支持在一次API调用中对不同的索引进行操作 可以在URI中指定Index也可以在请求的Payload中进行 操作中单条操作失败并不会影响其他操作 返回结果包括了每一条操作执行的结果
6.1 批量写入 批量对文档进行写操作是通过_bulk的API来实现的 请求方式POST 请求地址_bulk请求参数通过_bulk操作文档一般至少有两行参数(或偶数行参数) 第一行参数为指定操作的类型及操作的对象(index,type和id) 第二行参数才是操作的数据 参数类似于 {actionName:{_index:indexName, _type:typeName,_id:id}}
{field1:value1, field2:value2} actionName表示操作类型主要有create,index,delete和update 6.2 批量创建文档create POST _bulk
{create:{_index:article, _type:_doc, _id:3}}
{id:3,title:标题1,content:内容1,tags:[java, 面向对象],create_time:1554015482530}
{create:{_index:article, _type:_doc, _id:4}}
{id:4,title:标题2,content:内容2,tags:[java, 面向对象],create_time:1554015482530} 6.3 普通创建或全量替换index POST _bulk
{index:{_index:article, _type:_doc, _id:3}}
{id:3,title:标题1,content:内容1,tags:[java, 面向对象],create_time:1554015482530}
{index:{_index:article, _type:_doc, _id:4}}
{id:4,title:标题2,content:内容2,tags:[java, 面向对象],create_time:1554015482530} 如果原文档不存在则是创建 如果原文档存在则是替换(全量修改原文档) 6.4 批量删除delete
POST _bulk
{delete:{_index:article, _type:_doc, _id:3}}
{delete:{_index:article, _type:_doc, _id:4}} 6.5 批量修改update
POST _bulk
{update:{_index:article, _type:_doc, _id:3}}
{doc:{title:ES大法必修内功}}
{update:{_index:article, _type:_doc, _id:4}}
{doc:{create_time:1554018421008}}
6.6 组合应用 POST _bulk
{create:{_index:article, _type:_doc, _id:3}}
{id:3,title:标题1,content:内容1,tags:[java, 面向对
象],create_time:1554015482530}
{delete:{_index:article, _type:_doc, _id:3}}
{update:{_index:article, _type:_doc, _id:4}}
{doc:{create_time:1554018421008}} 6.7 批量读取 es的批量查询可以使用mget和msearch两种。其中mget是需要我们知道它的id可以指定不同的 index也可以指定返回值source。msearch可以通过字段查询来进行一个批量的查找。 _mget GET _mget
{docs: [{_index: es_db,_id: 1,_index: article,_id: 4}]
}#可以通过ID批量获取es_db的数据
GET /es_db/_mget
{docs: [{_id: 1},{_id: 4}]
}
#简化后
GET /es_db/_mget
{ids:[1,2]
} _msearch 在_msearch中请求格式和bulk类似。查询一条数据需要两个对象第一个设置index和type第二 个设置查询语句。查询语句和search相同。如果只是查询一个index我们可以在url中带上index这 样如果查该index可以直接用空对象表示。 GET /es_db/_msearch
{}
{query : {match_all : {}}, from : 0, size : 2}
{index : article}
{query : {match_all : {}}}