可以在https://www.elastic.co/cn/downloads/elasticsearch这个页面找到elasticsearch对应系统的安装包,elasticsearch用java开发的, 最新的版本内置了对应的jdk, 通过下面的方式能快速启动:
cd /安装目录/elasticsearch/bin
./elasticsearch
#验证是否启动, 可以访问: http://127.0.0.1:9200/
可以在https://www.elastic.co/cn/downloads/kibana这个页面找到kibana对应系统的安装包,kibana用node开发, 最新的版本内置了对应的node启动程序,启动流程如下:
分类 | 具体类型 |
---|---|
字符串 | text: 会被分词,能根据词项快速检索,比如文章的标题,文本 。keyword: 不会被分词,只能通过精确查询,比如文章的作者 |
整型 | byte, short , int, long |
浮点型 | float, double, half_float (16位) , scaled_float(缩放类型,比如价格55.55, 存的是5555, 缩放因子为100) |
boolean | 值为true, false |
date | 日期类型 |
二进制类型 | binary: 用的比较少,没法做索引 |
array | 数组类型,数据里的类型可以是对象 |
object | 对象类型,文档会包含嵌套的对象 |
nested | 嵌套类型, 他能够保证数据之间的层级结构 |
PUT film
{
"mappings": {
"properties": {
"id":{
"type": "keyword",
"store":true
},
"name":{
"type": "keyword",
"store":true
},
"desc":{
"type":"text",
"store":true,
"analyzer": "ik_max_word"
},
"tag":{
"type": "keyword",
"store":true
},
"actors":{
"type": "nested",
"properties":{
"id":{
"type": "keyword",
"store":true
},
"name":{
"type": "keyword",
"store":true
},
"sex":{
"type": "integer",
"store":true
}
}
}
}
}
}
GET film #film 是Index的名称
DELETE film #film 是Index的名称
对于索引没有所谓的更新操作,如果对于有些字段的类型需要做更新,只能删除原来的索引,重新创建新的索引。在实际的使用过程中,我们可以插入一些示例数据,通过ES帮我们生成默认mappings, 然后再对mappings做修改
PUT /film/_doc/001
{
"id":"001",
"name":"甄嬛传",
"desc":"雍正元年,结束了血腥的夺位之争,新的君主(陈建斌 饰)继位,国泰民安,政治清明,但在一片祥和的表象之下,一股暗流蠢蠢欲动,尤其后宫,华妃(蒋欣 饰)与皇后(蔡少芬 饰)分庭抗礼,各方势力裹挟其中,凶险异常。十七岁的甄嬛(孙俪饰)与好姐妹眉庄(斓曦饰)、陵容(陶昕然饰)参加选秀,她本抱着来充个数的念头,可皇帝(陈建斌饰)偏相中了她的智慧、气节与端庄,最后三人一同入选。但因华妃(蒋欣饰)嚣张,步步紧逼,眉庄被冤,陵容变心,天真的甄嬛慢慢变成了后宫精明的女子。皇帝发现年羹尧(孙宁饰)的野心,令甄父剪除年氏一族,甄嬛终于斗倒了华妃。但由于甄嬛与先故纯元皇后的神似,皇后设计以纯元皇后的礼服陷害甄嬛,父亲(沈保平饰)也被文字狱牵连和奸人陷害而遭牢狱之灾,生下女儿后,心灰意冷的甄嬛选择出宫修行。在宫外幸得十七爷允礼(李东学饰)悉心照顾,二人相亲相爱,只等有机会远走高飞。后因误传十七爷死讯,甄嬛为保全腹中骨肉,设计与皇帝相遇,狠心断绝对十七爷的爱恋,重回宫中,再度与皇后相斗。后因生下双生子,同时甄父的冤案得以平反,重新被皇帝重用,甄氏一族再度崛起。甄嬛多次躲过皇后的陷害,最终扳倒皇后。可造化弄人,由于皇帝的疑心,最终却只能看着心上人允礼死在自己怀中,而与叶澜依(热依扎饰)合谋弑君。皇帝驾崩后,甄嬛养子弘历登基,甄嬛被尊为圣母皇太后,即便享尽荣华,但眼见一生姐妹沈眉庄血崩而亡,一生爱人允礼为保其周全而无憾自尽,不过是一代封建王朝的悲情故梦罢了。",
"tag":["后宫","古装","清朝","爱情","宫斗"],
"actors":[
{
"id":"actor_001",
"name":"孙俪",
"sex":0
},
{
"id":"actor_002",
"name":"陈建斌",
"sex":1
},
{
"id":"actor_003",
"name":"蔡少芬",
"sex":0
},
{
"id":"actor_004",
"name":"蒋欣",
"sex":0
},
{
"id":"actor_005",
"name":"蓝盈盈",
"sex":0
}
]
}
POST /film/_doc/001/_update
{
"doc":{
"id":"001",
"tag":["后宫","古装","清朝","爱情","宫斗","玄幻"],
"actors":[
{
"id":"actor_002",
"name":"陈建斌",
"sex":1
},
{
"id":"actor_006",
"name":"蓝盈盈",
"sex":0
}
]
}
}
DELETE /film/_doc/001
对于查询, 如果需要了解内部是如何解析的, 可以在查询里加上"profile": "true"。
GET /film/_doc/001 #001表示文档的id
GET _analyze
{
"analyzer": "ik_max_word", #分词器
"text": "我是中国人"
}
GET /film/_search
{
"query": {
"term": {
"name.keyword": { #这里需要指定对name的keyword查询
"value": "甄嬛传"
}
}
}
}
GET /film/_search
{
"profile": "true",
"query": {
"terms": {
"name": ["甄", "画"]
}
}
}
GET /film/_search
{
"from": 0,
"size": 2,
"query": {
"match_all": {}
}
}
GET /film/_search
{
"profile": "true",
"query": {
"match": {
"name": "甄"
}
}
}
GET /film/_search
{
"profile": "true",
"query": {
"match_phrase": {
"desc": {
"query": "国泰民安 祥和",
"slop": 8
}
}
}
}
GET /film/_search
{
"profile": "true",
"query": {
"multi_match": {
"query": "传",
"fields": ["name", "desc", "tag"]
}
}
}
GET /film/_search
{
"profile": "true",
"query": {
"multi_match": {
"query": "民国",
"fields": ["name", "desc", "tag"],
"type": "best_fields",
"tie_breaker": 0.5
}
}
}
GET /film/_search
{
"profile": "true",
"query": {
"bool": {
"must": [
{
"term": {
"tag.keyword": {
"value": "爱情"
}
}
}
],
"must_not": [
{"term": {
"tag.keyword": {
"value": "土匪"
}
}}
]
}
}
}
GET /sms-logs-index/_search
{
"profile": "true",
"query": {
"range": {
"fee": {
"gte": 50,
"lte": 500
}
}
}
}
GET /sms-logs-index/_search
{
"profile": "true",
"query": {
"range": {
"createDate": {
"gte": "2020-09-16",
"lte": "2020-09-21"
}
}
}
}
GET /film/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "actors", #这里需要指定查询的path
"query": {
"bool": {
"must": [{
"term": {
"actors.name": "周迅"
}
}]
}
}
}
},
{
"term":{"tag":"民国"}
}
]
}
}
}
GET /sms-logs-index/_search
{
"profile": "true",
"from": 0,
"size": 2,
"query": {
"range": {
"fee": {
"gte": 50,
"lte": 500
}
}
},
"sort": [
{
"fee": {
"order": "desc"
}
}
]
}
GET /sms-logs-index/_search?scroll=5m
{
"from": 0,
"size": 2,
"query": {
"range": {
"fee": {
"gte": 50,
"lte": 500
}
}
}
}
GET /_search/scroll
{
"scroll": "5m",
"scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDnF1ZXJ5VGhlbkZldGNoBRRwVTRQUm5ZQllORnB0eHdqcVRpMgAAAAAAAAB-FlAxRDB2cU96UzdhbWRQSXAyWWZnZUEUcGs0UFJuWUJZTkZwdHh3anFUaTIAAAAAAAAAfxZQMUQwdnFPelM3YW1kUElwMllmZ2VBFHAwNFBSbllCWU5GcHR4d2pxVGkyAAAAAAAAAIAWUDFEMHZxT3pTN2FtZFBJcDJZZmdlQRRxRTRQUm5ZQllORnB0eHdqcVRpMgAAAAAAAACBFlAxRDB2cU96UzdhbWRQSXAyWWZnZUEUcVU0UFJuWUJZTkZwdHh3anFUaTMAAAAAAAAAghZQMUQwdnFPelM3YW1kUElwMllmZ2VB"
}
GET /sms-logs-index/_search
{
"profile": "true",
"from": 0,
"size": 2,
"query": {
"range": {
"fee": {
"gte": 50,
"lte": 500
}
}
},
"sort": [
{
"fee": {
"order": "desc"
},
"longCode":{
"order": "desc"
}
}
]
}
GET /sms-logs-index/_search
{
"profile": "true",
"from": 0,
"size": 2,
"query": {
"range": {
"fee": {
"gte": 50,
"lte": 500
}
}
},
"search_after":[200, 87454120],
"sort": [
{
"fee": {
"order": "desc"
},
"longCode":{
"order": "desc"
}
}
]
}
聚合查询一般用于对数据做统计, 比如每个城市双11消费了多少, 用户使用系统的平均时间是多少。聚合查询分下面几类
GET /sms-logs-index/_search
{
"profile": "true",
"aggs": {
"fee_max": { #聚合的名字
"max": { #聚合的类型
"field": "fee"
}
},
"fee_min":{
"min": {
"field": "fee"
}
},
"fee_sum":{
"sum": {
"field": "fee"
}
}
,
"fee_avg":{
"avg": {
"field": "fee"
}
}
}
}
GET /sms-logs-index/_search
{
"profile": "true",
"aggs": {
"fee_count": {
"cardinality": {
"field": "fee"
}
}
}
}
GET /sms-logs-index/_search
{
"profile": "true",
"aggs": {
"fee_stat": {
"stats": {
"field": "fee"
}
}
}
}
GET /sms-logs-index/_search
{
"profile": "true",
"size": 1,
"aggs": {
"fee_percents": {
"percentiles": {
"field": "fee",
"percents": [ #需要统计的百分比
1,
10,
25,
50,
75,
95,
99
]
}
}
}
}
GET /sms-logs-index/_search
{
"profile": "true",
"size": 1,
"aggs": {
"fee_percents": {
"percentile_ranks": {
"field": "fee",
"values": [200, 2000]
}
}
}
}
对文档进行分组的操作(与sql中的group by类似),把满足相关特性的文档分到一个桶里,即桶分,输出结果往往是一个个包含多个文档的桶(一个桶就是一个group)。
GET /sms-logs-index/_search
{
"profile": "true",
"size": 0,
"query": {
"term": {
"province": {
"value": "杭州"
}
}
},
"aggs": {
"province_terms": {
"terms": {
"field": "province",
"size": 10,
"min_doc_count": 4 #只返回文档个数不小于该值的 buckets
}
}
}
}
GET /sms-logs-index/_search
{
"profile": "true",
"size": 0,
"query": {
"term": {
"province": {
"value": "杭州"
}
}
},
"aggs": {
"fee_range": {
"range": {
"field": "fee",
"ranges": [
{
"from": 0,
"to": 100
},
{
"from": 100,
"to": 2000
}
]
}
}
}
}
GET /sms-logs-index/_search
{
"size": 0,
"aggs": {
"createDate_range": {
"date_range": {
"field": "createDate",
"ranges": [
{
"from": "2020-09-16",
"to": "2020-09-20"
},
{
"from": "2020-09-21",
"to": "2020-09-23"
}
]
}
}
}
}