elasticsearch 文档

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

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集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
7月前
|
API 索引
Elasticsearch 中的骚操作你确定不看看?
Elasticsearch 中的骚操作你确定不看看?
|
9月前
|
JSON 数据格式 网络架构
【Elasticsearch】文档操作
【Elasticsearch】文档操作
40 0
|
Java 数据库 Docker
Elasticsearch笔记
Elasticsearch笔记
121 0
Elasticsearch笔记
|
存储 Web App开发 搜索推荐
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
|
SQL 关系型数据库 MySQL
elasticsearch常用应用操作
elasticsearch常用应用操作,会批量从mysql批量导入数据。 会解决一些mysql不太好写的sql语句,如搜索多模糊查询。
111 1
|
存储 Web App开发 SQL
ElasticSearch学习笔记(一)-搜索引擎介绍及ElasticSearch安装(上)
ElasticSearch学习笔记(一)-搜索引擎介绍及ElasticSearch安装
ElasticSearch学习笔记(一)-搜索引擎介绍及ElasticSearch安装(上)
|
搜索推荐 安全 Java
ElasticSearch学习笔记(一)-搜索引擎介绍及ElasticSearch安装(下)
ElasticSearch学习笔记(一)-搜索引擎介绍及ElasticSearch安装
 ElasticSearch学习笔记(一)-搜索引擎介绍及ElasticSearch安装(下)
|
JSON 网络协议 前端开发
Elasticsearch笔记 (二)
Elasticsearch笔记 (二)
258 0
|
存储 JSON 自然语言处理
Elasticsearch笔记 (一)
Elasticsearch笔记 (一)
112 0
|
存储 JSON 搜索推荐
ElasticSearch 文档写入和查询
本篇文章主要是介绍ElasticSearch 文档写入和查询的基础知识。
258 0