Elasticsearch API 使用介绍

API文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html

Index API

索引API在特定索引中添加或更新类型化的JSON文档,使其可搜索。以下示例将JSON文档插入到“twitter”索引中,名为“tweet”的类型,ID为1:

curl -XPUT '192.168.0.56:9200/twitter/tweet/1?pretty' -d'
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}'

上述索引操作的结果是:

{
  "_index" : "twitter",
  "_type" : "tweet",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

_shards头提供有关索引操作的复制过程的信息。

  • total - 指示应对多少分片副本(主分片和副本分片)执行索引操作。
  • success-指示索引操作成功的分片副本数。
  • failed - 在索引操作在副本碎片上失败的情况下包含与复制相关的错误的数组。 索引操作成功的情况下成功至少为1。

自动索引创建

如果索引操作尚未创建,则索引操作自动创建索引(检出用于手动创建索引的create index API),并且如果尚未创建,则自动为特定类型创建动态类型映射(检出put映射API用于手动创建类型映射)。 映射本身非常灵活,并且是无模式的。新字段和对象将自动添加到指定类型的映射定义。查看映射部分以获取有关映射定义的更多信息。 可以通过设置操作来禁用自动创建索引。 auto_create_index在所有节点的配置文件中为false。可以通过设置索引来禁用自动映射创建。映射器。动态到每个索引作为索引设置。 自动索引创建可以包括基于模式的白/黑列表,例如,设置操作。 auto_create_index to +aaa , - bbb ,+ccc*, - *(意味着允许+,意味着不允许-)。

索引版本

每个索引文档都有一个版本号。相关的版本号作为对索引API请求的响应的一部分返回。索引API可选地允许在指定version参数时进行乐观并发控制。这将控制要对其执行操作的文档的版本。一个用于版本控制的用例的好例子是执行事务读取然后更新。从初始读取的文档指定版本可以确保在此期间没有发生更改(当为了更新而读取时,建议将偏好设置为_primary)。例如:

url -XPUT '192.168.0.56:9200/twitter/tweet/1?version=2&pretty' -d'
{
    "message" : "elasticsearch now has versioning support, double cool!"
}'
{
  "_index" : "twitter",
  "_type" : "tweet",
  "_id" : "1",
  "_version" : 3,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : false
}

注: 这里更改索引文档版本号时,先确认当前索引版本号,put制定的version等于当前版本号

索引类型

在上面解释的内部*外部版本类型旁边,Elasticsearch还支持特定用例的其他类型。这里是不同版本类型及其语义的概述。

  • internal 仅当给定版本与存储的文档的版本相同时才索引文档。
  • external或external_gt 仅在给定版本严格高于所存储文档的版本或如果没有现有文档时索引文档。给定版本将用作新版本,并与新文档一起存储。提供的版本必须是非负长数字。
  • external_gte 仅在给定版本等于或高于存储文档的版本时索引文档。如果没有现有文档,操作也将成功。给定版本将用作新版本,并与新文档一起存储。提供的版本必须是非负长数字。

自动ID生成

可以在不指定id的情况下执行索引操作。在这种情况下,将自动生成id。此外,op_type将自动设置为create。这里是一个例子(注意POST使用,而不是PUT):

curl -XPOST '192.168.0.56:9200/twitter/tweet/?pretty' -d'
> {
>     "user" : "kimchy",
>     "post_date" : "2009-11-15T14:12:12",
>     "message" : "trying out Elasticsearch"
> }'
{
  "_index" : "twitter",
  "_type" : "tweet",
  "_id" : "AVmA9WQ8kc6yr5hbEKZd",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

索引timeout

执行索引操作时分配的主分片可能不可用。这种情况的一些原因可能是主分片当前正在从网关恢复或正在进行重定位。默认情况下,索引操作将在主分片上等待最多1分钟,然后失败并响应错误。 timeout参数可以用于显式指定等待时间。以下是将其设置为5分钟的示例:

curl -XPUT '192.168.0.56:9200/twitter/tweet/1?timeout=5m&pretty' -d'
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}'

# 回显
{
  "_index" : "twitter",
  "_type" : "tweet",
  "_id" : "1",
  "_version" : 4,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : false
}

获取API

et API允许从索引根据其id获取一个类型化的JSON文档。以下示例从名为twitter的索引(名为tweet)下获取JSON文档,id为0:

curl -XGET 'localhost:9200/twitter/tweet/1?pretty'

显示结果:

{
  "_index" : "twitter",
  "_type" : "tweet",
  "_id" : "1",
  "_version" : 4,
  "found" : true,
  "_source" : {
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
  }
}

以上结果包括我们希望检索的文档的_index,_type,_id和_version,包括文档的实际_source(如果响应中的found字段指示)。

API还允许使用HEAD检查文档的存在,例如:

curl -XHEAD 'localhost:9200/twitter/tweet/0?pretty'

过滤source

默认情况下,get操作返回_source字段的内容,除非已使用stored_fields参数或禁用_source字段。您可以使用_source参数关闭_source检索:

curl -XGET 'localhost:9200/twitter/tweet/0?_source=false&pretty'

如果只需要完整的_source中的一个或两个字段,则可以使用_source_include&_source_exclude参数来包含或过滤出所需的部分。这对于大文档特别有用,其中部分检索可以节省网络开销。两个参数都以逗号分隔的字段或通配符表达式列表。例:

curl -XGET 'localhost:9200/twitter/tweet/1?_source_include=*.id&_source_exclude=user&pretty'

删除API

删除API允许从基于其id的特定索引中删除键入的JSON文档。以下示例从名为twitter的索引(名为tweet)下删除JSON文档,其id为1:

 curl -XDELETE 'http://localhost:9200/twitter/tweet/1'
{"found":true,"_index":"twitter","_type":"tweet","_id":"1","_version":6,"result":"deleted","_shards":{"total":2,"successful":2,"failed":0}}

更新API

更新API允许基于提供的脚本更新文档。操作从索引获取文档(与分片并置),运行脚本(使用可选的脚本语言和参数),并将结果返回索引(也允许删除或忽略操作)。它使用版本控制来确保在“get”和“reindex”期间没有发生更新。 注意,这个操作仍然意味着文档的完整的索引,它只是删除一些网络往返,并减少get和索引之间的版本冲突的机会。需要启用_source字段才能使此功能正常工作。 例如,让索引一个简单的文档:

curl -XPUT 'localhost:9200/test/type1/1?pretty' -d'
{
    "counter" : 1,
    "tags" : ["red"]
}'

现在,我们可以执行一个脚本来增加计数器

curl -XPOST 'localhost:9200/test/type1/1/_update?pretty' -d'
{
    "script" : {
        "inline": "ctx._source.counter += params.count",
        "lang": "painless",
        "params" : {
            "count" : 4
        }
    }
}'

我们可以在标签列表中添加一个标签(注意,如果标签存在,它仍然会添加它,因为它的列表)

curl -XPOST 'localhost:9200/test/type1/1/_update?pretty' -d'
{
    "script" : {
        "inline": "ctx._source.tags.add(params.tag)",
        "lang": "painless",
        "params" : {
            "tag" : "blue"
        }
    }
}'

除了_source,通过ctx映射可以使用以下变量:_index,_type,_id,_version,_routing,_parent和_now(当前时间戳)。 我们还可以向文档中添加一个新字段:

curl -XPOST 'localhost:9200/test/type1/1/_update?pretty' -d'
{
    "script" : "ctx._source.remove(\"new_field\")"
}'

而且,我们甚至可以更改执行的操作。如果标记字段包含绿色,此示例将删除文档,否则不执行任何操作(noop):

curl -XPOST 'localhost:9200/test/type1/1/_update?pretty' -d'
{
    "script" : {
        "inline": "if (ctx._source.tags.contains(params.tag)) { ctx.op = \"delete\" } else { ctx.op = \"none\" }",
        "lang": "painless",
        "params" : {
            "tag" : "green"
        }
    }
}'
  • 使用部分文档的更新

更新API还支持传递部分文档,这将被合并到现有文档中(简单递归合并,内部合并对象,替换核心“键/值”和数组)。例如:

curl -XPOST 'localhost:9200/test/type1/1/_update?pretty' -d'
{
    "doc" : {
        "name" : "new_name"
    }
}'

Multi GET API

多GET API允许基于索引,类型(可选)和id(可能路由)获取多个文档。该响应包括具有所有提取的文档的docs数组,每个元素在结构上类似于由get API提供的文档。这里是一个例子:

curl 'localhost:9200/_mget' -d '{
    "docs" : [
        {
            "_index" : "test",
            "_type" : "type",
            "_id" : "1"
        },
        {
            "_index" : "test",
            "_type" : "type",
            "_id" : "2"
        }
    ]
}'

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术

浅谈Nginx服务器的内部核心架构设计!

Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以...

582
来自专栏腾讯开源的专栏

【开源公告】iOS内存监控组件OOMDetector正式开源

OOMDetector OOMDetector是一个iOS内存监控组件,应用此组件可以帮助你轻松实现OOM监控、大内存分配监控、内存泄漏检测等功能。 组件特性...

3566
来自专栏PhpZendo

MVC 框架中的路由器(Router)是如何跑起来的

MVC 路由器(Router)或分发器(Dispatcher)会检测 HTTP 请求的 URL,并尝试将单个 URL 组件与控制器和控制器中定义的方法匹配,同时...

511
来自专栏JAVA技术站

SpringCloud Eureka注册中心使用

一、maven依赖配置,SpringCloud目前有四个版本,经测试Camden,Dalston两个版本构建Eureka正常,其它两版本存在jar依赖问题,所以...

464
来自专栏月牙寂

swarm源码分析(1)---command流程

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

2915
来自专栏PHP实战技术

你的api上锁了吗?

职责单一化,各司其职,后端只负责Api接口编写提供给各种不同类型的客户端去调用,但是客户端和服务器端调用是要有权限限制的,不能任何一个客户端都可以随便调用我们的...

662
来自专栏PHP实战技术

你的Api接口上锁了吗?

职责单一化,各司其职,后端只负责Api接口编写提供给各种不同类型的客户端去调用,但是客户端和服务器端调用是要有权限限制的,不能任何一个客户端都可以随便调用我们的...

461
来自专栏java达人

DWR简介

image.png DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户...

19410
来自专栏Java编程技术

SpringBoot之spring-boot-load模块

正常情况下classloader只能找到jar里面当前目录或者文件类里面的*.class文件。为了能够加载嵌套jar里面的资源之前都是把嵌套jar里面的clas...

652
来自专栏蘑菇先生的技术笔记

Redis性能问题排查解决手册(七)

4396

扫码关注云+社区