本篇翻译的是Elasticsearch官方文档中的一些技巧,是使用Elasticsearch必不可少的必备知识,并且适用于所有的Rest Api。

返回数据格式化

当在Rest请求后面添加?pretty时,结果会以Json格式化的方式显示。另外,如果添加?format=yaml结果会以树的形式显示,默认都是Flase.

返回数据的易读性

结尾添加?human=true,返回的数据会有很好的可读性,比如:

  • time:3600 会显示为 time:1h
  • size:1024 会显示为 1kb

常用的Date Math

在Elasticsearch中日期数学表达式是很常用的,在查询中经常会通过它来作为检索条件,比如range或者daterange。表达式通常会有下面几种操作:

  • +1h ,表示加上一个一个小时
  • -1d,表示减去一天
  • /d,表示向一天取整

支持的单位也很多,比如

  • y,代表一年
  • M,代表一个月
  • w,代表一周
  • d,代表一天
  • h,代表一个小时
  • m,代表一分钟
  • s,代表一秒钟
  • ms,代表毫秒

举个例子:

  • now+1h,表示当前时间加上一个小时,即一个小时后
  • now+1h+1m,表示当前时间加上一个小时零一分钟,即一个小时一分钟后
  • now+1h/d,表示当前时间加上一个小时,并向一天取整。
  • 2015-01-01||+1M/d,2015-01-01加上一个月,并向一天取整

返回的内容过滤

有时候我们可能并不想返回所有的数据,因为这样会浪费一定的空间和时间,因此需要对查询返回的结果进行过滤。所有的API都接受一个参数——filter_path,这个参数支持逗号分隔,可以同时填写多个值。

例如,如果只想要返回查询的时间、事件的id和分值,可以像下面这样:

  1. curl -XGET 'localhost:9200/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score'
  2. {
  3. "took" : 3,
  4. "hits" : {
  5. "hits" : [
  6. {
  7. "_id" : "3640",
  8. "_score" : 1.0
  9. },
  10. {
  11. "_id" : "3642",
  12. "_score" : 1.0
  13. }
  14. ]
  15. }
  16. }

也支持*来忽略对某个字段的过滤:

  1. curl -XGET 'localhost:9200/_nodes/stats?filter_path=nodes.*.ho*'
  2. {
  3. "nodes" : {
  4. "lvJHed8uQQu4brS-SXKsNA" : {
  5. "host" : "portable"
  6. }
  7. }
  8. }

使用**则会忽略最大长度的路径,与Spring MVC的Url匹配差不多。

  1. curl 'localhost:9200/_segments?pretty&filter_path=indices.**.version'
  2. {
  3. "indices" : {
  4. "movies" : {
  5. "shards" : {
  6. "0" : [ {
  7. "segments" : {
  8. "_0" : {
  9. "version" : "5.2.0"
  10. }
  11. }
  12. } ],
  13. "2" : [ {
  14. "segments" : {
  15. "_0" : {
  16. "version" : "5.2.0"
  17. }
  18. }
  19. } ]
  20. }
  21. },
  22. "books" : {
  23. "shards" : {
  24. "0" : [ {
  25. "segments" : {
  26. "_0" : {
  27. "version" : "5.2.0"
  28. }
  29. }
  30. } ]
  31. }
  32. }
  33. }
  34. }

注意,elasticsearch一般会直接返回一条数据的原始信息,即_source字段。如果要对_source进行过滤,可以参考下面的用法:

  1. curl -XGET 'localhost:9200/_search?pretty&filter_path=hits.hits._source&_source=title'
  2. {
  3. "hits" : {
  4. "hits" : [ {
  5. "_source":{"title":"Book #2"}
  6. }, {
  7. "_source":{"title":"Book #1"}
  8. }, {
  9. "_source":{"title":"Book #3"}
  10. } ]
  11. }
  12. }

扁平化

设置flat_settings 为true,会以扁平化的方式返回数据:

  1. {
  2. "persistent" : { },
  3. "transient" : {
  4. "discovery.zen.minimum_master_nodes" : "1"
  5. }
  6. }

关于参数

在Elastcisearch的使用中,往往要接触到各种数据类型。如果某个字段设置了固定的类型,那么当执行查询或者索引时,一些数据会发生自动的类型转换。

Boolean

在Es中,false、no、0、off这些值都代表false,其他的值都是true.

Number

所有的API都支持以字符串的方式代表JSON中的数字类型。

Date

支持的类型上面都说过了...

Geo

Geo类型主要用于地图一类的数据,这里就先不介绍了。使用方法可以参考

模糊查询

有的时候一些需要允许一定的模糊度,比如检索hallo可以查询到hello,这就要支持模糊查询。模糊查询可以使用fuzziness参数,它有点像range:

  1. -fuzziness <= fieldValue <= +fuzziness

并且可以设置一定的模糊度,比如:

比如,长度为:

  • 0..2,必须完全匹配
  • 3..5,可以有一个编辑距离的模糊度
  • >5,可以有两个编辑距离的模糊度

返回结果——驼峰式

所有的API都接受一个case参数,如果设置为camelCase,那么所有的名称都会以驼峰式的形式返回。

查询的请求体

除了POST请求外,其他的请求时没有请求体的。这个时候如果要执行查询,可以把参数放在Url后面。

参考

1 官方文档

2 编辑距离,wiki百科

Elasticsearch——Rest API中的常用用法的更多相关文章

  1. golang中type常用用法

    golang中,type是非常重要的关键字,一般常见用法就是定义结构,接口等,但是type还有很多其它的用法,在学习中遇到了以下几种,这点简单总结记录下 定义结构 type Person struct ...

  2. java string中indexOf()常用用法

    Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引. 2.int indexOf(String st ...

  3. Web API中常用Filter的执行顺序举例讲解

    在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...

  4. java-API中的常用类,新特性之-泛型,高级For循环,可变参数

    API中的常用类 System类System类包含一些有用的类字段和方法.它不能被实例化.属性和方法都是静态的. out,标准输出,默认打印在控制台上.通过和PrintStream打印流中的方法组合构 ...

  5. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  6. JavaWeb学习之JDBC API中常用的接口和类

    JDBC API中包含四个常用的接口和一个类分别是: 1.Connection接口 2.Statement接口 3.PreparedStatement接口 4.ResultSet接口 5.Driver ...

  7. Java集合中迭代器的常用用法

    该例子展示了一个Java集合中迭代器的常用用法public class LinkedListTest { public static void main(String[] args) { List&l ...

  8. Elasticsearch java api 常用查询方法QueryBuilder构造举例

    转载:http://m.blog.csdn.net/u012546526/article/details/74184769 Elasticsearch java api 常用查询方法QueryBuil ...

  9. 大数据(5) - HDFS中的常用API操作

    一.安装java 二.IntelliJ IDEA(2018)安装和破解与初期配置 参考链接 1.进入官网下载IntelliJ IDEA https://www.jetbrains.com/idea/d ...

随机推荐

  1. Bullet物理引擎在OpenGL中的应用

    Bullet物理引擎在OpenGL中的应用 在开发OpenGL的应用之时, 难免要遇到使用物理来模拟OpenGL中的场景内容. 由于OpenGL仅仅是一个关于图形的开发接口, 因此需要通过第三方库来实 ...

  2. Eclipse引入外部Jar在发布时没有自动带入,导致出现ClassNoFound错误

    今天换了一台电脑重新配置环境调试老程序的时候出现链接数据库错误java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver提示. ...

  3. Xamarin.Android之UI Test简单入门

    一.前言 相信Xamarin免费之后会有更多的人加入进来,这也是我一直以来最希望看到的事,更多的人加入到这个社区中,为这个社区贡献自己的一份力量,国内当前还没有一个比较正规或者说是名气比较大的Xama ...

  4. 手把手教你用python打造网易公开课视频下载软件1-总述

    写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...

  5. 【译】用jQuery 处理XML--写在前面的话

    用jQuery 处理XML--写在前面的话 用jQuery 处理XML-- DOM(文本对象模型)简介 用jQuery 处理XML--浏览器中的XML与JavaScript 用jQuery 处理XML ...

  6. html5 postMessage解决跨域、跨窗口消息传递

    一些麻烦事儿 平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 1.页面和其打开的新窗口的数据传递 2.多窗口之间消息传递 3.页面与嵌套的iframe消息传递 4. ...

  7. location.href 一个小注意

    项目里有location.href = '#......'这一类的代码,一直以为某处做了特殊处理,变成前面有主机名的URL,看架构源码也没找到这种处理.今天灵光一现,自己是被JS高程将解位置方法那节给 ...

  8. 为什么Java方法里面不能再嵌套方法?

    直接原因: 这是Java基本语法定义的,方法中不可以再次声明方法,只能调用其他的方法. 个人理解: 1.方法栈是需要一个载体的,这个载体就是Class,如果一个方法的上一级不是一个类,就说明没有载体. ...

  9. DIY一个前端模板引擎.(一)

    前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码.个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离.为了理解模板引擎原 ...

  10. 知方可补不足~sqlserver中使用sp_who查看sql的进程

    回到目录 在SQLSERVER中每个会话,即每个查询分析器窗口都会产生一个SQL进程,对于那些持续时间短的进程,它们转瞬即失,而对于持续时间比较长的,我们需要希望查看它的运行状态,就可以借助SQL提供 ...