ElasticSearch是基于Apache Lucene的分布式搜索引擎, 提供面向文档的搜索服务。本文以6.2.3版本为例介绍ElasticSearch的应用。

本文首先介绍ElasticSearch中的索引和文档的概念,并在系列的其它文章进行更进一步的介绍。

目录:

可以在官网下载压缩包, 在解压目录中执行bin/elasticsearch来启动服务, 或者使用包管理器来安装启动.

ES默认端口为9200, 本地启动ES后向http://localhost:9200发送GET请求可以查看ES的基本信息:

GET 'localhost:9200'
{
"name" : "hiTUe19",
"cluster_name" : "elasticsearch_finley",
"cluster_uuid" : "cfKnyFL1Rx6URmrmAuMBFw",
"version" : {
"number" : "5.1.2",
"build_hash" : "c8c4c16",
"build_date" : "2017-01-11T20:18:39.146Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}

ElasticSearch采用三层数据结构来管理数据:

  • 索引(index): 索引是最高层的数据结构,可以定义独立的搜索索引和分片存储策略
  • 类型(type): 每个index可以拥有多个type, 用于存储不同类型的文档
  • 文档:文档是最基本的数据结构,存储和搜索都是围绕文档展开的

ElasticSearch中的文档是一个Json对象,搜索的结果是文档的集合因此被称为面向文档的搜索。

与三层数据结构相对应,我们可以使用三个字段来唯一标识文档:

  • _index: 代表文档所在的索引。索引名必须小写, 不能以下划线开头, 不能包含逗号.
  • _type: 代表文档所在的类型集。type名可以为大小写, 不能以下划线开头, 不能包含逗号.
  • _id: 用于唯一标识某个type中的文档

空查询请求可以列出某个数据结构中所有文档:

  • 列出所有文档: GET /_search
  • 列出索引blog下的所有文档: GET /blog/_search
  • 列出类型/blog/user下的所有文档: GET /blog/user/_search

创建文档

IndexAPI可以用于创建文档:

$ POST 'localhost:9200/blog/user/'
content-type: application/json
body:
{
"id": 1,
"nickname": "finley"
}
response:
{
"_index": "blog",
"_type": "user",
"_id": "AV5WoO0MdsHuOObNBTWU",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}

使用POST请求创建文档, 在url中指定_index_type, 在请求体中使用json格式提交文档数据。

_index_type不存在ES会自动创建。上述请求中文档的_id字段由ElasticSearch创建,我们也可以自己指定_id:

POST localhost:9200/blog/user/2/
content-type: application/json
{
"id": 2,
"nickname": "easy"
} response:
{
"_index": "blog",
"_type": "user",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}

访问文档

使用GET请求访问文档,需要提供_index, _type_id三个参数唯一标识文档。

GET localhost:9200/blog/user/2/
response:
{
"_index": "blog",
"_type": "user",
"_id": "2",
"_version": 2,
"found": true,
"_source": {
"id": 2,
"nickname": "easy"
}
}

更新文档

因为修改文档后难以更新索引,因此ElasticSearch修改文档的操作是通过删除原文档后重新添加新文档来进行的。

使用IndexAPI对已存在的文档发送POST请求则会更新文档:

POST localhost:9200/blog/user/2/
content-type: application/json
{
"nickname": "easy",
"gender": "male"
} response:
{
"_index": "blog",
"_type": "user",
"_id": "2",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}

注意_version, created, result字段显示文档已被更新。通过GET请求查看更新后的文档:

GET localhost:9200/blog/user/2/
{
"_index": "blog",
"_type": "user",
"_id": "2",
"_version": 2,
"found": true,
"_source": {
"nickname": "easy2",
"gender": ”male“
}
}

注意到原文档中的_id字段已经不见了,文档完全由我们发送的上一个POST请求定义。

修改文档也可以通过PUT方法:

PUT localhost:9200/blog/user/2/
content-type: application/json
{
"id": 2,
"nickname": "easy3"
} {
"_index": "blog",
"_type": "user",
"_id": "2",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}

再次通过GET请求确认文档已被修改:

GET localhost:9200/blog/user/2/
{
"_index": "blog",
"_type": "user",
"_id": "2",
"_version": 3,
"found": true,
"_source": {
"id": 2
"nickname": "easy3",
}
}

删除文档

删除文档需要发送DELETE请求:

DELETE localhost:9200/blog/user/2/
response:
{
"found": true,
"_index": "blog",
"_type": "user",
"_id": "2",
"_version": 4,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}

ElasticSearch入门简介的更多相关文章

  1. ElasticSearch 入门简介

    公号:码农充电站pro 主页:https://codeshellme.github.io ElasticSearch 是一款强大的.开源的.分布式的搜索与分析引擎,简称 ES,它提供了实时搜索与聚合分 ...

  2. ElasticSearch 入门

    http://www.oschina.net/translate/elasticsearch-getting-started?cmp ElasticSearch 简单入门 返回原文英文原文:Getti ...

  3. ElasticSearch入门 第一篇:Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  4. ElasticSearch 入门总结

    ElasticSearch 入门 本篇为 ElasticSearch 入门学习总结笔记,课程视频地址:ElasticSearch 入门 一.ElasticSearch 简介 1.1.什么是Elasti ...

  5. ElasticSearch入门 :Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  6. [转帖]Flink(一)Flink的入门简介

    Flink(一)Flink的入门简介 https://www.cnblogs.com/frankdeng/p/9400622.html 一. Flink的引入 这几年大数据的飞速发展,出现了很多热门的 ...

  7. 转载:elasticsearch入门篇

    转自:https://www.cnblogs.com/hello-shf/p/11543408.html elasticsearch入门篇   elasticsearch专栏:https://www. ...

  8. Elasticsearch入门教程(三):Elasticsearch索引&映射

    原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...

  9. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

随机推荐

  1. List,set,Map理解

    集合 集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. ...

  2. abaqus6.14导出网格inp以及导入inp以建模

    建好part,组装后,划分网格,然后建立job,之后write input就可以在工作目录生成刚才新建网格的单元和节点编号信息了. *Heading ** Job name: buildmodel M ...

  3. orabbix监控oracle

    Orabbix 是一个用来监控 Oracle 数据库实例的 Zabbix 插件.下载地址: http://www.smartmarmot.com/product/orabbix/download/ O ...

  4. python_day1_常量

    常量 定义: 不变的量为常量,或在程序中不可改变的量 用法: AGE_OF_BOY  =56 注:在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量

  5. FreeRTOS移植到STM32上的移植过程

    所有的单片机都是顺序执行的,而对于多任务而言就显得力不从心了,虽然在一些小项目中可以通过定时器来实现,但这种实现方式没有实时性,一旦任务需要在规定时间内做出响应,那只能通过实时操作系统来完成了.在很多 ...

  6. Android 音乐(音效)播放方式总结

    一.音效的分类 音效按照作用的不同,可以将音效分为即时音效和背景音乐.两种音效在Android中的实现技术是不同的. 主要的实现方式为:SoundPool.MediaPlayer. 区别在于,Medi ...

  7. 在Markdown中写注释

    概述 下面是我整理的在Markdown中写注释的几种方法,供自己开发时参考,相信对其他人也有用. html标签 既然Markdown内嵌html语法,那么就可以用可以用隐藏的html标签. 注意:需要 ...

  8. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  9. MySQL slow_log日志表出现非法字段值

    背景 从mysql.slow_log 获取慢查询日志很慢,该表是csv表,没有索引. 想添加索引来加速访问,而csv引擎不能添加索引(csv引擎存储是以逗号分割的文本来存储的),只能改存储引擎来添加索 ...

  10. 命令行下查看python和numpy的版本和安装位置

    命令行下查看python和numpy的版本和安装位置 1.查看python版本 方法一: python -V 注意:‘-V‘中‘V’为大写字母,只有一个‘-’ 方法二: python --versio ...