您的位置:首页 > 其它

ElasticSearch入门简介

2018-08-19 02:49 253 查看

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
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: