elasticsearch 文档
elasticsearch 文档
文档格式
索引中最基本的单元叫做文档 document. 在es中文档的示例如下:
{
"_index": "questions",
"_type": "baichebao",
"_id": "4",
"_score": 1,
"_version" : 1,
"_source": {
"id": 4,
"content": "汽车常见故障的解决办法有哪些?",
"uid": 1,
"all_answer_count": 2,
"series_id": 0,
"score": 0,
"answer_count": 2
}
}
文档中下划线开头的是es自带的字段
- _index 代表索引名
- _type 代表类型
- _id 代表文档id,如果插入文档的时候没有设置id的话,那么es会自动生成一个唯一id
- _score 这个不是文档自带的,而是进行搜索的时候返回的,代表这个文档和搜索的相关匹配分值
- _source 储存原始文本及分类好的字段
- _version 代表这个文档的版本
这里的索引,类型,文档,字段的概念很多文章都做一个关系型数据的对比。
我现在有一个user表,这个user表有个type字段,0/1代表是男还是女,这个表的每条数据就代表一个人,它拥有名称,电话等属性。
对应于es,表就相当于索引,男女的字段相当于type,每条数据就是一个document,名称电话等属性就是一个字段。
版本控制
上面可以看到es的文档中有个_version字段,当两个并发请求要修改文档的时候,es使用的是乐观锁。
在es中,更新请求实际上是分为两个阶段,获取文档,修改文档,然后保存文档。
那么当两个更新请求同时要修改文档的时候,系统乐观的认为不会有两个并发请求对一个系统操作。
文档原本的版本为1,请求A获取了version为1的文档,请求B也获取了version为1的文档,然后请求A修改完文档后,并且先执行了保存操作,这个时候,系统中的文档version变为了2。
这个时候,B再执行保存操作的时候,告诉系统我要修改version为1的文档。系统就会抛出一个错误,说文档版本不匹配。然后这个错误由应用程序自己来进行控制。
这种机制在请求量大的时候会比悲观锁机制好。但是缺点是需要程序处理版本冲突错误,可能一般的方法是封装更新操作,并且设置重复重试次数。
增删改查操作
增加:
POST /website/blog/ -d
{
id: 123,
name: "blog123"
}
增加操作如果制定的文档已经存在了,就会返回409错误
删除:
DELETE /website/blog/123
如果文档没有存在,则返回404
更新:
PUT /website/blog/123
{
"title": "My first blog entry",
"text": "I am starting to get the hang of this...",
"date": "2014/01/02"
}
更新的时候往往有个操作就是“如果有数据,则更新,如果没有数据,则创建”
可以用upsert
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"script" : "ctx._source.counter += count",
"params" : {
"count" : 4
},
"upsert" : {
"counter" : 1 // 如果没有id为1的文档,则创建,并且设置counter为1
}
}'
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"doc" : {
"name" : "new_name"
},
"doc_as_upsert" : true // 如果没有文档,则doc就是新的文档
}'
更新必须明确的一点是,es中的文档的更新操作实际上是执行了两步,获取文档,更新文档,然后再保存文档。
查:
GET /website/blog/123
如果你已经知道一批文档id了,那么你可以使用批量查的功能
GET /_mget
{
"docs" : [
{
"_index" : "website",
"_type" : "blog",
"_id" : 2
},
{
"_index" : "website",
"_type" : "pageviews",
"_id" : 1,
"_source": "views"
}
]
}
elasticsearch 文档的更多相关文章
- elasticsearch文档-analysis
elasticsearch文档-analysis analysis 基本概念 全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokeniz ...
- elasticsearch文档-modules
elasticsearch文档-modules modules 模块 cluster 原文 基本概念 cluster: 集群,一个集群通常由很多节点(node)组成 node: 节点,比如集群中的每台 ...
- Elasticsearch文档查询
简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...
- ElasticSearch文档操作介绍三
ElasticSearch文档的操作 文档存储位置的计算公式: shard = hash(routing) % number_of_primary_shards 上面公式中,routing 是一个可变 ...
- Elasticsearch入门教程(四):Elasticsearch文档CURD
原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...
- ElasticSearch文档及分布式文档存储
1.什么是文档? 文档由索引(_index),类型(_type),唯一标识(_id) 组成,我们为 _index(索引) 分配相关逻辑地址分片,该索引下的数据会根据索引以及类型计算哈希来分配数据存储的 ...
- elasticsearch文档学习
1.集群 节点(一个elasticsearch实体) 索引 主节点 :集群级别变更,新增或移除节点,索引: 主节点不参与文档级别搜索和变更. 分片(shard):一个完整的搜索引擎,lucene ...
- ElasticSearch文档
1.什么是文档? 程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串.数字.布尔类型.另一个对 ...
- elasticsearch 文档阅读笔记(三)
文档 elasticsearch是通过document的形式存储数据的,个人理解文档就是一条数据一个对象 我们添加索引文档中不仅包含了数据还包含了元数据 比如我们为一个数据添加索引 文档中不仅有jso ...
随机推荐
- Swift语言的基础详解
1.1.关于swift · Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制.Swift 采 ...
- Visual Studio Xamarin编译Android项目出错的解决办法
安装完Xamarin后,编译Android项目时,你会发现好长时间进度都不动,当你取消编译后,会发现其实是出错了,就是因在Android项目在第一次编译时要去google网站上下一个andorid s ...
- TCPDF 6.0.036 发布,PHP 的 PDF 操作包
TCPDF 6.0.036 包含对注册色彩的支持. TCPDF是一个用于快速生成PDF文件的PHP5函数包.TCPDF基于FPDF进行扩展和改进.支持UTF-8,Unicode,HTML和XHTML.
- 分布式系统一致性问题和Raft一致性算法
一致性问题 一致性算法是用来解决一致性问题的,那么什么是一致性问题呢? 在分布式系统中,一致性问题(consensus problem)是指对于一组服务器,给定一组操作,我们需要一个协议使得最后它们的 ...
- 分享一个简单程序(webApi+castle+Automapper+Ef+angular)
前段时间在周末给朋友做了一个小程序,用来记录他们单位的一些调度信息(免费,无版权问题).把代码分享出来.整个程序没有做任何架构.但是麻雀虽小,用到的技术也没少.WebApi+Castle+AutoMa ...
- 图解集合5:不正确地使用HashMap引发死循环及元素丢失
问题引出 前一篇文章讲解了HashMap的实现原理,讲到了HashMap不是线程安全的.那么HashMap在多线程环境下又会有什么问题呢? 几个月前,公司项目的一个模块在线上运行的时候出现了死循环,死 ...
- Nim教程【七】
这是国内第一个关于Nim的系列教程 先说废话 很开心,在今天凌晨快一点多的时候拿到了 nim-lang.com:nim-lang.cn:nim-lang.net 这三个域名,到不是为了投资,准备用ni ...
- 有shi以来最详细的正则表达式入门教程
本篇文章文字内容较多,但是要学习正则就必须耐心读下去,正则表达式是正则表达式其实并没有想像中的那么困难,但是想要熟练的掌握它,还是需要下功夫勤加练习的.这里讲一些正则表达式的语法和学习方法,大家还要多 ...
- Linux gzip、gunzip
200 ? "200px" : this.width)!important;} --> 介绍 gzip是linux自带的压缩文件命令,它的压缩比大概能达到60%-70%,比z ...
- Lock,LockFree,MemoryBarrier,ConcurrentCollection
最近看并行编程书本的一些心得,简单记录下多线程和并行编程必知必会的几个概念,再次加深自己的理解. .NET Framework4提供了一个新的命名空间System.Collections.Concur ...