GET API是Elasticsearch中常用的操作,一般用于验证文档是否存在;或者执行CURD中的文档查询。与检索不同的是,GET查询是实时查询,可以实时查询到索引结果。而检索则是需要经过处理才能搜索到。合理利用这些方法,可以更灵活的使用Elasticsearch。

查询样例

Get API允许基于ID字段从Elasticsearch查询JSON文档,下面就是一个查询的例子:

curl -XGET 'http://localhost:9200/website/blog/123?pretty'

上面的命令表示,在website索引的blog类型中查询id为123的文档,返回结果如下:

{
  • "_index": "website",
  • "_type": "blog",
  • "_id": "123",
  • "_version": 1,
  • "found": true,
  • "_source": {
    • "title": "My first blog entry",
    • "text": "Just trying this out...",
    • "date": "2014/01/01"

    }

}

上面返回的数据包括文档的基本内容,

_index是索引名称

_type是类型

_id是ID

_version是版本号

_source字段包括了文档的基本内容

found字段代表是否找到

这个API支持使用HEAD方式提交,这样可以验证这个ID是否存在,而不会返回无用的数据。

curl -XHEAD -i 'http://localhost:9200/website/blog/123'HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 0

实时

默认情况下get API是实时的,并不会受到索引的刷新频率的影响。(也就是说,只要索引的数据,就可以立马查询到)

有的时候我们可能想要关闭实时查询,这样可以设置realtime=false。

也可以在配置文件中配置,使之全局可用,即配置action.get.realtime为false。

类型可选

API中类型_type是可选的,如果想要查询所有的类型,可以直接指定类型为_all,从而匹配所有的类型。

source过滤

默认情况下get操作会返回_source字段,除非你使用了fields字段或者禁用了_source字段。通过设置_source属性,可以禁止返回source内容(source内容为空):

curl -XGET 'http://localhost:9200/website/blog/123?_source=false'{
  • "_index": "website",
  • "_type": "blog",
  • "_id": "123",
  • "_version": 1,
  • "found": true,
  • "_source": { }

}

如果想要返回特定的字段,可以使用_source_include(包含)或者_source_exclude(排除)进行过滤。可以使用逗号分隔来设置多种匹配模式,比如:

curl -XGET 'http://localhost:9200/website/blog/123?_source_include=title,date'curl -XGET 'http://localhost:9200/website/blog/123?_source_exclude=date'
curl -XGET 'http://localhost:9200/website/blog/123?_source_include=*&_source_exclude=date'
{
  • "_index": "website",
  • "_type": "blog",
  • "_id": "123",
  • "_version": 1,
  • "found": true,
  • "_source": {
    • "text": "Just trying this out...",
    • "title": "My first blog entry"

    }

}

字段

get操作允许设置fields字段,返回特定的字段:

curl -XGET 'http://localhost:9200/website/blog/123?fields=title,text'{
  • "_index": "website",
  • "_type": "blog",
  • "_id": "123",
  • "_version": 1,
  • "found": true,
  • "fields": {
    • "title": [
      • "My first blog entry"

      ],

    • "text": [
      • "Just trying this out..."

      ]

    }

}

如果请求的字段没有被存储,那么他们会从source中分析出来,这个功能也可以用source_filter来替代。

元数据比如_routing_parent是永远不会被返回的。

Generated fields

如果在执行完索引操作,没有刷新,那么GET操作会读取translog的内容来查询文档。然而有一些字段仅仅是在索引的时候产生的。如果你尝试读取索引中的生成的字段,就会出现错误。可以设置ignore_erros_on_generated_fields=true来忽略错误。

Translog就是索引的数据要进行存储,总不可能索引一条就更新一次Lucene结构。于是就搞了个translog,数据的变动会先放在translog里面,再刷新到es中。实时查询,其实是读取了translog中,还未持久化的数据。

仅返回_source

使用/{index}/{type}/{id}/_source可以仅仅返回_source字段,而不必返回过多不必要的信息,浪费网络带宽。

curl -XGET 'http://localhost:9200/website/blog/123/_source'{
  • "title": "My first blog entry",
  • "text": "Just trying this out...",
  • "date": "2014/01/01"

}

也可以使用过滤机制:

curl -XGET 'http://localhost:9200/website/blog/123/_source?_source_include=title,text,date'{
  • "date": "2014/01/01",
  • "text": "Just trying this out...",
  • "title": "My first blog entry"

}

也是支持使用HEAD方式,验证是否存在:

curl -XHEAD -i 'http://localhost:9200/website/blog/123/_source'HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 0

路由

当索引的时候指定了路由,那么查询的时候就一定要指定路由。

curl -XGET 'http://localhost:9200/XXX/XXX/XXX?routing=XXX'

如果路由信息不正确,就会查找不到文档

Preference

控制为get请求维护一个分片的索引,这个索引可以设置为:

  • _primary 这个操作仅仅会在主分片上执行。
  • _local 这个操作会在本地的分片上执行。
  • Custom (string) value 用户可以自定义值,对于相同的分片可以设置相同的值。这样可以保证不同的刷新状态下,查询不同的分片。就像sessionid或者用户名一样。

刷新

refresh参数可以让每次get之前都刷新分片,使这个值可以被搜索。设置true的时候,尽量要考虑下性能问题,因为每次刷新都会给系统带来一定的压力

分布式

get操作会通过特定的哈希方法,把请求分配给特定的分片进行查询。由于在分布式的环境下,主分片和备份分片作为一个组,都可以支持get请求。这就意味着,分片的数量越多,get执行的规模就越大。

参考

http://www.cnblogs.com/xing901022/p/5317698.html

ElasticSearch API 之 GET的更多相关文章

  1. Python Elasticsearch api,组合过滤器,term过滤器,正则查询 ,match查询,获取最近一小时的数据

    Python Elasticsearch api   描述:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.下 ...

  2. Elasticsearch API响应的一些常用选项

    我们可以点击Elasticsearch API以获取所需的响应,但是如果要修改API响应,以便我们更改显示格式或过滤掉某些字段,然后我们可以将这些选项与查询一起应用. 有一些常见的选项可以适用于API ...

  3. Python Elasticsearch api

    描述:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.下面介绍了利用Python API接口进行数据查询,方便 ...

  4. ElasticSearch API 简要介绍

    调用其API会返回很多信息,例如集群的信息,节点的信息等 检查集群的状态----Restful API说明 1:检查集群状态信息 2:管理集群 3:执行 增删改查 命令 4:执行高级命令 Restfu ...

  5. elasticsearch api约定

    elasticsearch REST API 使用JSON通过HTTP协议传输. 本约定贯穿整个REST API,除非有特别的说明. 一.多重索引 大多数APIs引用到一个index参数来在多个索引中 ...

  6. java优雅的使用elasticsearch api

    本文给出一种优雅的拼装elasticsearch查询的方式,可能会使得使用elasticsearch的方式变得优雅起来,使得代码结构很清晰易读. 建立elasticsearch连接部分请参看另一篇博客 ...

  7. Java调用Elasticsearch API查询及matchPhraseQuery和matchQuery的区别

    一.引入依赖 <!--Elasticsearch client--> <!-- https://mvnrepository.com/artifact/org.elasticsearc ...

  8. ElasticSearch API 之 UPDATE

    ES本身是一个倾向于查询检索的框架,对于更新的操作,太过频繁总归不好的. 阅读本篇后,你可以使用Script对所有的文档执行更新操作,也可以使用doc对部分文档执行更新,也可以使用upsert对不存在 ...

  9. ElasticSearch API 之 DELETE

    删除API,可以根据特定的ID删除文档. $ curl -XDELETE 'http://localhost:9200/website/blog/AVbkih8AltSLRRB7XAun' 会返回下面 ...

随机推荐

  1. js获得本季度的开始日期 结束日期

    var now = new Date(); //当前日期var nowMonth = now.getMonth()+1; //当前月var nowYear = now.getFullYear(); / ...

  2. syslog(),closelog()与openlog()--日志操作函数 (2)

    文章出处:http://blog.chinaunix.net/uid-26583794-id-3166083.html 守护进程日志的实现 syslogd守护进程用于解决守护进程的日志记录问题,而日志 ...

  3. vuejs 的错误代码,有助于理解

    1.vuejs 的双向绑定理解 2.嵌套复杂对象的使用. * 1. 分割都是, 2. json 中分割都是; 4. v-bind:value="param" 括号内的就是 vuej ...

  4. 五. web开发基础

    一.HTML 二.CSS 三.JavaScript 四.web框架 1.web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 ...

  5. 微信小程序canvas实现圆形计时器功能

    index.js import Canvas from '../../utils/canvas.js'Page({ ...Canvas.options, /** * 页面的初始数据 */ data: ...

  6. C++_STL基础案例

    C++ C++三种容器:list.vector和deque的区别:https://blog.csdn.net/gogokongyin/article/details/51178378 一.容器 小常识 ...

  7. 【Java_Spring】控制反转IOC(Inversion of Control)

    1. IOC的概念 控制反转IoC(Inversion of Control)是一种设计思想,而DI(依赖注入)是实现IoC的一种方法.在没有使用IOC的程序中,对象间的依赖关系是靠硬编码的方式实现的 ...

  8. 怎么用js写一个类似于百度输入框的搜索插件

    PS:这次做的这个小插件只是在前端实现,并没有经过数据库.需要用到的的框架:1.bootstrap.css的样式 2.Vue.js 最终效果如下: JS部分: $(window).click(func ...

  9. 浏览器中如何获取想要的offsetwidth、、、clientwidth、、offsetheight、、、clientheight。。。

    clientWidth是对象看到的宽度(不含边线,即border)scrollWidth是对象实际内容的宽度(若无padding,那就是边框之间距离,如有padding,就是左padding和右pad ...

  10. sed快速学习