elasticsearch入门(简单的crud操作)
记录一下,elasticsearch从创建索引到插入数据的一个crud操作。
一、创建索引
curl -XPUT "http://192.168.99.1:9200/productindex" -d'
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"product" : {
"properties": {
"name" : {
"type": "text",
"fielddata": true
},
"price" : {
"type": "long"
}
}
}
}
}'
二、插入数据
1、如果需要插入的数据已经存在,那么执行替换操作,如果不存在则执行插入操作
注意: 1、此处是手动指定的id的值
2、如果productindex/product/1 这个数据存在,如果请求体中只有name字段,那么这行数据的price字段就会被删除,即执行的是替换操作,而不是更新操作
curl -XPUT "http://192.168.99.1:9200/productindex/product/1" -d'
{
"name" : "pen",
"price" : 2
}'
2、如果数据已经存在,那么就报错,不存在则执行插入操作
注意:此处只需要加上_create或加上op_type=create即可
curl -XPUT "http://192.168.99.1:9200/productindex/product/1?op_type=create" -d'
{
"name" : "new pen",
"price" : 2
}'
或
curl -XPUT "http://192.168.99.1:9200/productindex/product/1/_create" -d'
{
"name" : "new pen",
"price" : 2
}'
3、插入数据的时候自动生成id的值
注意:此处就需要使用post请求,而不是使用put请求。
curl -XPOST "http://192.168.99.1:9200/productindex/product" -d'
{
"name" : "pen",
"price" : 2
}'
三、修改数据
1、使用_update或op_type=update指定修改,数据不存在报错
curl -XPOST "http://192.168.99.1:9200/productindex/product/1/_update" -d'_update" -d'
{
"doc": {
"name" : "update new name"
}
}'
{
"doc": {
"name" : "update new name"
}
}'
2、使用乐观锁version控制修改(防止在并发情况下数据修改有误)
后方的这个version的值为数据当前的版本号,如果es中这个数据的版本号发生了变化,则修改失败。
curl -XPOST "http://192.168.99.1:9200/productindex/product/1/_update?version=7" -d'version=7" -d'
{
"doc": {
"name" : "update new name"
}
}'
{
"doc": {
"name" : "update new name"
}
}'
3、使用upsert操作,如果数据不存在则执行upsert部分(插入操作),否则执行更新操作
curl -XPOST "http://192.168.99.1:9200/productindex/product/12/_update" -d'
{
"doc":{
"name":"update new value"
},
"upsert" : {
"name" : "数据不存在执行插入操作",
"price" : 1
}
}'
或执行如下操作 (使用doc_as_upsert,如果文档不存在,则将doc的部分当做upsert的部分)
curl -XPOST "http://192.168.99.1:9200/productindex/product/13/_update" -d'"doc_as_upsert" : true
{
"doc":{
"name":"update new value"
},
"doc_as_upsert" : true
}'
}'
四、高亮查询
1、插入一条新的数据
curl -XPUT "http://192.168.99.1:9200/productindex/product/29" -d'
{
"name" : "new name",
"desc" : "this is a desc field"
}'
2、匹配name字段中有has name的值或desc字段中有desc的值,并对匹配到的值进行高亮
curl -XGET "http://192.168.99.1:9200/productindex/product/_search" -d'
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "has name"
}
},
{
"term": {
"desc": {
"value": "desc"
}
}
}
]
}
},
"highlight": {
"pre_tags": "<span style=\"color:red\">",
"post_tags": "</span>",
"fields": {
"name" : {
"pre_tags": "<span style=\"color:blue\">",
"post_tags": "</span>"
},
"*" : {
}
}
}
}'
五、删除数据
1、删除id=1的数据
curl -XDELETE "http://192.168.99.1:9200/productindex/product/1"
elasticsearch入门(简单的crud操作)的更多相关文章
- sitecore开发入门Sitecore的CRUD操作 - 第二部分
在上一篇(sitecore开发入门Sitecore的CRUD操作 - 第一部分)中我们讨论了如何使用Sitecore Item API,Glass,Fortis和Synthesis在Sitecore中 ...
- ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...
- 8天掌握EF的Code First开发系列之2 简单的CRUD操作
本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...
- 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作
这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...
- Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)
一.简介 Spring Data MongoDB 项目提供与MongoDB文档数据库的集成.Spring Data MongoDB POJO的关键功能区域为中心的模型与MongoDB的DBColle ...
- hibernate入门-基本配置及简单的crud操作
框架来说主要是需要写大量的配置文件,hibernate相比mybatis来说更强大,移植性更好: 1.类和数据库的映射配置:配置文件命名一般--类名.hbm.xml (user.hbm.xml),与实 ...
- ElasticSearch基础+文档CRUD操作
本篇博客是上一篇的延续,主要用来将年前学习ES的知识点做一个回顾,方便日后进行复习和汇总!因为近期项目中使用ES出现了点小问题,因此在这里做一个详细的汇总! [01]全文检索和Lucene (1)全文 ...
- ELK学习实验004:Elasticsearch的简单介绍和操作
一 集群节点 Elstaicsearch的集群是由多个节点组成都,通过cluster.name设置集权名称,比能切用与区分其他的集群,每个节点通过node.name指定节点 在Elasticsearc ...
- sitecore开发入门Sitecore的CRUD操作 - 第一部分
在本文中,讨论如何使用Sitecore.Data.Items.Item并对这些项执行CRUD(创建,读取,更新和删除)操作.我还将介绍如何使用Glass和Fortis类库进行相同的操作,这些操作都是对 ...
随机推荐
- 前后端数据交互(八)——请求方法 GET 和 POST 区别
WEB 开发同学一看 get 和 post 请求方法的区别,第一感觉都是 So easy! 学习ajax.fetch.axios时,发送网络请求携带参数时,都需要分别处理get和post的参数.所以我 ...
- 对easyui-validatebox的验证类型的扩展
easyui为我们提供了validatebox类型的组件,使用它可以完成自动验证,十分方便.要注意的是,easyui中的各个组件都是有继承关系的.通过查看api,textbox继承validatebo ...
- [第五篇]——Docker 镜像加速之Spring Cloud直播商城 b2b2c电子商务技术总结
Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器.Docker 官方和国内很多云服务商都提供了国内加速器服务,例如: 科大镜像: 网易: 阿里云: 你 ...
- 【第九篇】- Git 标签之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 xxx 项目发布一个"1.0"版本. ...
- WPF WPF中解决内存泄露的几点提示与解决方法
http://www.cnblogs.com/LastPropose/archive/2011/08/01/2124359.html 一直以来用WPF做一个项目,但是开发中途发现内存开销太大,用ANT ...
- leetcode-H2O生成(多线程)
现在有两种线程,氧 oxygen 和氢 hydrogen,你的目标是组织这两种线程来产生水分子. 存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来. 氢和氧线程会被分 ...
- Lambda 表达式详解
目录 前言 预备知识,理解委托的构成 引用实例方法的委托 引用静态方法的委托 Lambda 表达式的实际编译结果 CASE 1 没有捕获任何外部变量的Lambda 表达式 CASE 2 捕获了外部方法 ...
- Rust之旅 02.通过例子学习自定义类型
本期文章接上期继续讲述Rust语言中的数据类型,Rust自定义数据类型主要是通过下面这两个关键字来创建: 结构体( struct ): 定义一个结构体(structure) 枚举( enum ): 定 ...
- input竖直的输入框,文字从上到下排列
有的时候可能会有这样的需求,一个竖直的输入框,输入信息,文字也是从上到下排列: (但是在移动端或用轮播swiper时不起作用,可以用textarea代替input) <!DOCTYPE html ...
- Selenium多浏览器处理 (Chrome/Firefox/IE)
测试用例文件:test_selenium/test_hogwarts.py 使用pytest框架 定义一个变量,通过外部传入变量,确定使用哪个浏览器 browser = os.getenv(" ...