目录
  1. 1. 返回数据格式化
  2. 2. 返回数据的易读性
  3. 3. 常用的Date Math
  4. 4. 返回的内容过滤
  5. 5. 扁平化
  6. 6. 关于参数
    1. 6.1. Boolean
    2. 6.2. Number
    3. 6.3. Geo
  7. 7. 模糊查询
  8. 8. 返回结果——驼峰式
  9. 9. 查询的请求体
ES中辅助API常用用法详解

本篇是使用Elasticsearch必不可少的必备知识,并且适用于所有的Rest Api。
参考:http://www.cnblogs.com/xing901022/p/5303740.html

返回数据格式化

当在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,表示当前时间加上一个小时,并向一天取整
2016-01-01||+1M/d,2016-01-01加上一个月,并向一天取整

返回的内容过滤

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

1
curl -XGET 'localhost:9200/website/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score'

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

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

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

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

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

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

扁平化

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

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

关于参数

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

Boolean

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

Number

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

Geo

Geo类型主要用于地图一类的数据,这里就先不介绍了。

模糊查询

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

1
-fuzziness <= fieldValue <= +fuzziness

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

0,1,2 设置它的编辑距离
AUTO,如果设置Auto,那么会根据字符串的长度而改变

比如,长度为:

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

返回结果——驼峰式

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

查询的请求体

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

文章作者: 李浩
文章链接: https://leehoward.cn/2019/10/16/ES中辅助API常用用法详解/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 leehoward
打赏
  • 微信
  • 支付宝

评论