elasticsearch 文档 - 轩脉刃

标签: elasticsearch 文档 | 发表时间:2015-10-12 11:54 | 作者:轩脉刃
出处:

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 文档] 推荐:

elasticsearch文档-字段的mapping

- - 开源软件 - ITeye博客
elasticsearch文档-字段的mapping. Mapping是指定义如何将document映射到搜索引擎的过程,比如一个字段是否可以查询以及如何分词等,一个索引可以存储含有不同"mapping types"的documents,ES允许每个mapping type关联多个mapping定义.

elasticsearch 文档 - 轩脉刃

- - 博客园_首页
elasticsearch 文档. 索引中最基本的单元叫做文档 document. "content": "汽车常见故障的解决办法有哪些. } 文档中下划线开头的是es自带的字段. _id 代表文档id,如果插入文档的时候没有设置id的话,那么es会自动生成一个唯一id. _score 这个不是文档自带的,而是进行搜索的时候返回的,代表这个文档和搜索的相关匹配分值.

如何在 Elasticsearch 中查找并移除重复文档 | Elastic Blog

- -
将数据导入 Elasticsearch 的很多系统都将利用. Elasticsearch 为新插入的文档自动生成 ID 值. 但是,如果数据源将同一文档多次意外发送到 Elasticsearch,并且对于 Elasticsearch 插入的每个文档都使用了这种自动生成的. _id值,那么这个文档就会使用不同的.

Elasticsearch自定义文档得分并排序

- - JenkinWang's Blog
大多数情况下,我们需要对查询结果排序,比方说按最新时间降序、按金额降序等. 我们只需要对相应的字段 sort 即可. 但有时候也会出现一些复杂的情况,比方说有A、B、C、D、E类数据,他想让你给这类数据重新定义优先级,按照B、E、D、A、C的顺序展示,并且每类数据内部按时间降序. 然而最近我们也提出了一个类似这样的需求,查阅相关文档后,发现Elasticsearch里的 function_socre函数可以实现这一功能, 遂将此学习内容做一个记录.

熬夜爆肝整理的一份elasticsearch中文文档手册

- - SegmentFault 最新的文章
由于本文篇幅较长,想要获取PDF,请关注‘公众号-菜鸟成长学习笔记’回复"es手册"即可领取文件. Elaticsearch,简称为 ES, ES 是一个开源的高扩展的分布式全文搜索引擎,Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档. ES是一个文档型数据库,在与传统的关系型数据库上,存在着一定的差异.

[译]elasticsearch mapping

- - an74520的专栏
es的mapping设置很关键,mapping设置不到位可能导致索引重建. 请看下面各个类型介绍^_^. 每一个JSON字段可以被映射到一个特定的核心类型. JSON本身已经为我们提供了一些输入,支持 string,  integer/ long,  float/ double,  boolean, and  null..

Elasticsearch as Database - taowen - SegmentFault

- -
【北京上地】滴滴出行基础平台部招聘 Elasticsearch 与 Mysql binlog databus 开发工程师. 内推简历投递给: [email protected]. 推销Elasticsearch. 时间序列数据库的秘密(1)—— 介绍. 时间序列数据库的秘密(2)——索引.

ElasticSearch 2 的节点调优(ElasticSearch性能)

- - 行业应用 - ITeye博客
一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下几个,以便帮助我们更好的了解,如何去设计ElasticSearch节点的数目:. 打算建立多少索引,支持多少应用. elasticsearch版本: elasticsearch-2.x. 需要回答的问题远不止以上这些,但是第五个问题往往是容易被我们忽视的,因为单个ElasticSearch集群有能力支持多索引,也就能支持多个不同应用的使用.

Elasticsearch:使用 Elasticsearch 进行语义搜索

- - 掘金 后端
在数字时代,搜索引擎在通过浏览互联网上的大量可用信息来检索数据方面发挥着重要作用. 此方法涉及用户在搜索栏中输入特定术语或短语,期望搜索引擎返回与这些确切关键字匹配的结果. 虽然关键字搜索对于简化信息检索非常有价值,但它也有其局限性. 主要缺点之一在于它对词汇匹配的依赖. 关键字搜索将查询中的每个单词视为独立的实体,通常会导致结果可能与用户的意图不完全一致.

elasticsearch的javaAPI之query

- - CSDN博客云计算推荐文章
elasticsearch的javaAPI之query API. the Search API允许执行一个搜索查询,返回一个与查询匹配的结果(hits). 它可以在跨一个或多个index上执行, 或者一个或多个types. 查询可以使用提供的 query Java API 或filter Java API.