Linux环境docker安装Elasticsearch+kibana
准备一台服务器
第一步:安装docker 参考链接 :https://www.cnblogs.com/yufeng218/p/8370670.html
下载ES和kibana的docker镜像,官网上有,注意下载的版本号要一致 ES版本最好不要超过7.0,各种各样的问题,很无语。kibana 6.7之后的版本才支持中文,
首先需要安装JDK
解压安装包后 docker load -i 或者直接 docker pull
查看镜像id

直接docker run 就行了。
kibana也是这么启动,需要指定下es
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:(es images id) (kibana images id)
之后进到docker里,在/user/share/kibana/config/kibana.yaml 里加一行配置
i18n.locale: zh-CN 注意冒号后边有个空格
之后就可以了

term查询
这些查询通常⽤于结构化的数据,⽐如:number, date, keyword等,⽽不是对text。
也就是说,全⽂本查询之前要先对⽂本内容进⾏分词,⽽单词级别的查询直接在相应字段的
反向索引中精确查找,单词级别的查询⼀般⽤于数值、⽇期等类型的字段上
Term query 精准匹配查询
POST nba/_search
{
"query": {
"term": {
"jerseyNo": "23"
}
}
}
Exsit Query 在特定的字段中查找⾮空值的⽂档
POST nba/_search
{
"query": {
"exists": {
"field": "teamNameEn"
}
}
}
Prefifix Query 查找包含带有指定前缀term的⽂档
POST nba/_search
{
"query": {
"prefix": {
"teamNameEn": "Rock"
}
}
}
Wildcard Query ⽀持通配符查询,*表示任意字符,?表示任意单个字符
POST nba/_search
{
"query": {
"wildcard": {
"teamNameEn": "Ro*s"
}
}
}
Regexp Query 正则表达式查询
POST nba/_search
{
"query": {
"regexp": {
"teamNameEn": "Ro.*s"
}
}
}
Ids Query(查找id为1和2的球员)
POST nba/_search
{
"query": {
"ids": {
"values": [1,2]
}
}
}
范围查询
查找指定字段在指定范围内包含值(⽇期、数字或字符串)的⽂档。
查找在nba打了2年到10年以内的球员
POST nba/_search
{
"query": {
"range": {
"playYear": {
"gte": 2,
"lte": 10
}
}
}
}
查找1980年到1999年出⽣的球员
POST nba/_search
{
"query": {
"range": {
"birthDay": {
"gte": "01/01/1999",
"lte": "2022",
"format": "dd/MM/yyyy||yyyy"
}
}
}
}
布尔查询
must :必须出现在匹配⽂档中
filter :必须出现在⽂档中,但是不打分
must_not :不能出现在⽂档中
should :应该出现在⽂档中
must (查找名字叫做James的球员)
POST /nba/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"displayNameEn": "james"
}
}
]
}
}
}
效果同must,但是不打分(查找名字叫做James的球员)
POST /nba/_search
{
"query": {
"bool": {
"filter": [
{
"match": {
"displayNameEn": "james"
}
}
]
}
}
}
must_not (查找名字叫做James的⻄部球员)
POST /nba/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"displayNameEn": "james"
}
}
],
"must_not": [
{
"term": {
"teamConferenceEn": {
"value": "Eastern"
}
}
}
]
}
}
}
should(查找名字叫做James的打球时间应该在11到20年⻄部球员)
1、即使匹配不到也返回,只是评分不同
POST /nba/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"displayNameEn": "james"
}
}
],
"must_not": [
{
"term": {
"teamConferenceEn": {
"value": "Eastern"
}
}
}
],
"should": [
{
"range": {
"playYear": {
"gte": 11,
"lte": 20
}
}
}
]
}
}
}
2、如果minimum_should_match=1,则变成要查出名字叫做James的打球时间在11到20年⻄部球员
POST /nba/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"displayNameEn": "james"
}
}
],
"must_not": [
{
"term": {
"teamConferenceEn": {
"value": "Eastern"
}
}
}
],
"should": [
{
"range": {
"playYear": {
"gte": 11,
"lte": 20
}
}
}
],
"minimum_should_match": 1
}
}
}
排序查询
⽕箭队中按打球时间从⼤到⼩排序的球员
POST nba/_search
{
"query": {
"match": {
"teamNameEn": "Rockets"
}
},
"sort": [
{
"playYear": {
"order": "desc"
}
}
]
}
⽕箭队中按打球时间从⼤到⼩,如果年龄相同则按照身⾼从⾼到低排序的球员
POST nba/_search
{
"query": {
"match": {
"teamNameEn": "Rockets"
}
},
"sort": [
{
"playYear": {
"order": "desc"
}
},
{
"heightValue": {
"order": "asc"
}
}
]
}
聚合查询
ES聚合分析是什么
-
聚合分析是数据库中重要的功能特性,完成对⼀个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最⼤值、最⼩值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强⼤的聚合分析能⼒
-
对⼀个数据集求最⼤、最⼩、和、平均值等指标的聚合,在ES中称为指标聚合
-
⽽关系型数据库中除了有聚合函数外,还可以对查询出的数据进⾏分组group by,再在组上进⾏指标聚合。在ES中称为桶聚合
指标聚合
max求最大值/min求最小值/sum求合/avg求平均值
求出⽕箭队球员的平均年龄
aggs 跟query、sort一样,代表聚合
avgAge 别名,代表聚合结果的字段名称
avg 聚合类型,求平均值
field 聚合字段
size 查询结果,查询的记录条数为0,不返回记录详情,也就是,只返回聚合结果
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"avgAge": {
"avg": {
"field": "age"
}
}
},
"size": 0
}
value_count 统计⾮空字段的⽂档数,跟mysql中的count()功能一样
写法1:求出⽕箭队中球员打球时间不为空的数量
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"countPlayerYear": {
"value_count": {
"field": "playYear"
}
}
},
"size": 0
}
写法2:查出⽕箭队有多少名球员
POST nba/_count
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
}
}
Cardinality 值去重计数,跟mysql中的distinct去重一样
查出⽕箭队中年龄不同的数量
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"counAget": {
"cardinality": {
"field": "age"
}
}
},
"size": 0
}
stats 统计count max min avg sum 5个值
查出⽕箭队球员的年龄stats
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"statsAge": {
"stats": {
"field": "age"
}
}
},
"size": 0
}
Extended stats ⽐stats多4个统计结果: 平⽅和、⽅差、标准差、平均值加/减两个标准差的区间
查出⽕箭队球员的年龄Extend stats
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"extendStatsAge": {
"extended_stats": {
"field": "age"
}
}
},
"size": 0
}
Percentiles 占⽐百分位对应的值统计,默认返回[ 1, 5, 25, 50, 75, 95, 99 ]分位上的值
1%的人,最大年龄是多少
5%的人,最大年龄是多少
25%的人,最大年龄是多少
50%的人,最大年龄是多少
75%的人,最大年龄是多少
95%的人,最大年龄是多少
99%的人,最大年龄是多少
查出⽕箭的球员的年龄占⽐
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"pecentAge": {
"percentiles": {
"field": "age"
}
}
},
"size": 0
}
查出⽕箭的球员的年龄占⽐(指定分位值)
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"percentAge": {
"percentiles": {
"field": "age",
"percents": [
20,
50,
75
]
}
}
},
"size": 0
}
桶聚合-------mysql中group by
Terms Aggregation 根据字段项分组聚合
⽕箭队根据年龄进⾏分组
field 分组字段,group by age
size 返回的分组数,如下,分组结果一共分成了100个组,size:10,则返回10个分组的数据
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"aggsAge": {
"terms": {
"field": "age",
"size": 10
}
}
},
"size": 0
}
order 分组聚合排序
⽕箭队根据年龄进⾏分组,分组信息通过年龄从⼤到⼩排序 (通过指定字段)
解析:根据组内最大的年龄,对所有分组进行排序
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"aggsAge": {
"terms": {
"field": "age",
"size": 10,
"order": {
"_key": "desc"
}
}
}
},
"size": 0
}
⽕箭队根据年龄进⾏分组,分组信息通过⽂档数从⼤到⼩排序 (通过⽂档数)
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"aggsAge": {
"terms": {
"field": "age",
"size": 10,
"order": {
"_count": "desc"
}
}
}
},
"size": 0
}
每⽀球队按该队所有球员的平均年龄进⾏分组排序 (通过分组指标值)
POST /nba/_search
{
"aggs": {
"aggsTeamName": {
"terms": {
"field": "teamNameEn",
"size": 30,
"order": {
"avgAge": "desc"
}
},
"aggs": {
"avgAge": {
"avg": {
"field": "age"
}
}
}
}
},
"size": 0
}
筛选分组聚合
湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (指定值列表)
POST /nba/_search
{
"aggs": {
"aggsTeamName": {
"terms": {
"field": "teamNameEn",
"include": [
"Lakers",
"Rockets",
"Warriors"
],
"exclude": [
"Warriors"
],
"size": 30,
"order": {
"avgAge": "desc"
}
},
"aggs": {
"avgAge": {
"avg": {
"field": "age"
}
}
}
}
},
"size": 0
}
湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (正则表达式匹配值)
POST /nba/_search
{
"aggs": {
"aggsTeamName": {
"terms": {
"field": "teamNameEn",
"include": "Lakers|Ro.*|Warriors.*",
"exclude": "Warriors",
"size": 30,
"order": {
"avgAge": "desc"
}
},
"aggs": {
"avgAge": {
"avg": {
"field": "age"
}
}
}
}
},
"size": 0
}
Range Aggregation 范围分组聚合
NBA球员年龄按20,20-35,35这样分组
POST /nba/_search
{
"aggs": {
"ageRange": {
"range": {
"field": "age",
"ranges": [
{
"to": 20
},
{
"from": 20,
"to": 35
},
{
"from": 35
}
]
}
}
},
"size": 0
}
NBA球员年龄按20,20-35,35这样分组 (起别名)
POST /nba/_search
{
"aggs": {
"ageRange": {
"range": {
"field": "age",
"ranges": [
{
"to": 20,
"key": "A"
},
{
"from": 20,
"to": 35,
"key": "B"
},
{
"from": 35,
"key": "C"
}
]
}
}
},
"size": 0
}
Date Range Aggregation 时间范围分组聚合
NBA球员按出⽣年⽉分组
POST /nba/_search
{
"aggs": {
"birthDayRange": {
"date_range": {
"field": "birthDay",
"format": "MM-yyy",
"ranges": [
{
"to": "01-1989"
},
{
"from": "01-1989",
"to": "01-1999"
},
{
"from": "01-1999",
"to": "01-2009"
},
{
"from": "01-2009"
}
]
}
}
},
"size": 0
}
Date Histogram Aggregation 时间柱状图聚合
按天、⽉、年等进⾏聚合统计。可按 year (1y), quarter (1q), month (1M), week (1w), day(1d), hour (1h), minute (1m), second (1s) 间隔聚合
NBA球员按出⽣年分组
POST /nba/_search
{
"aggs": {
"birthday_aggs": {
"date_histogram": {
"field": "birthDay",
"format": "yyyy",
"interval": "year"
}
}
},
"size": 0
}
⾼亮查询
POST /nba_latest/_search
{
"query": {
"match": {
"displayNameEn": "james"
}
},
"highlight": {
"fields": {
"displayNameEn": {}
}
}
}
⾃定义⾼亮查询
POST /nba_latest/_search
{
"query": {
"match": {
"displayNameEn": "james"
}
},
"highlight": {
"fields": {
"displayNameEn": {
"pre_tags": [
"<h1>"
],
"post_tags": [
"</h1>"
]
}
}
}
}
2980

被折叠的 条评论
为什么被折叠?



