Kibana 是一个免费且开放的用户界面,能够对 Elasticsearch 数据进行可视化操作,从跟踪查询负载,到理解请求如何流经整个应用,都能轻松完成。
1.Kibana安装
注意要与ES版本保持一致
https://www.elastic.co/downloads/past-releases#kibanahttps://www.elastic.co/downloads/past-releases#kibana
进入kibana-8.8.2
的config文件夹配置,修改kibana.yml配置文件。
第6、11、43行设置以下内容
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
然后运行kibana.bat文件,访问网页
http://localhost:5601http://localhost:5601
2.使用调试工具
2.1 点击management
2.2 点击Index Management
,进入索引管理的页面
2.3 点击dev tools,
和ES进行交互
通过控制台发送请求ES。
GET /job/_mapping
3.Kibana操作
3.1 索引的操作
①创建索引
PUT goods
②查询索引
GET goods
GET _cat/indices?v
③删除索引
DELETE goods
④创建索引并指定映射关系
PUT goods
{"mappings": {"properties": {"id": {"type": "long"},"title": {"type": "text"},"brand": {"type": "keyword"}}}
}
3.2 文档的操作
①添加文档
POST /goods/_doc/1
{"id": 1001,"title": "mate40","brand": "华为"
}
POST /goods/_doc/2
{"id": 1002,"title": "mate50","brand": "华为"
}
②查询文档
#查询文档 GET /goods/_doc/1
#查询所有文档 GET /goods/_search
③修改文档
#全量修改
PUT /goods/_doc/1
{"id": 1000
}PUT /goods/_doc/1
{"price": 4999
}
#局部修改
POST /goods/_update/1
{"doc": {"price": 5000}
}
④删除文档
DELETE /goods/_doc/2
4.match查询
Match查询是一种基于全文本的查询方法,可以在一个或多个字段中搜索包含指定文本的文档。它会将查询字符串进行分词处理,然后对每个词进行匹配,从而找到所有匹配的文档。
4.1 添加测试数据
使用Elasticsearch中的Bulk工具批量生成数据。
ES中提供了批量导入接口Bulk,允许通过以下格式快速导入构建好的文档.接口格式如下
PUT _bulk
{ "index": { "_index": "job", "_id": "1999" }}
{"jid":1999,"title":"Java开发工程师","salary":{"gte":20000,"lte":30000},"city":"深圳","company":"深圳大疆","description":"..."}
index:代表操作类型, |
_index:代表指向索引名 |
_id:要操作的数据id |
4.2 查询全部内容
GET /job/_search
{"query": {"match_all": {}},"from": 0, #分页开始的位置,默认为0"size": 100 #期望获取的文档总数
}
4.3 非字符串精准查询
GET /job/_search
{"query": {"match": {"jid": 1005}}
}
4.4 字符串模糊查询
查询title
中包含开发
的文档,title
映射定义的数据类型为text
,字段内容会被分析
GET /job/_search
{"query": {"match": {"title": "java"}}
}
查询city
包含深
的文档
GET /job/_search
{"query": {"match": {"city": "深"}}
}
会发现查询结果是0条记录,原因是我们定义mapping映射,city
属性的数据类型为keyword
,只能通过精确值搜索到。我们分别搜索深圳
和北京
,可以得到对应的结果。
4.5 排序
按照jid
降序排序
GET /job/_search
{"sort": [{"jid": "desc"}]
}
4.6 分页
查询5条数据
GET /job/_search
{],"from": 0,"size": 5
}
4.7 查询指定字段
通过"_source"指定需要查询哪些字段,多个字段用[]括起来。
GET /job/_search
{"_source": ["jid","title"]
}
4.8 多字段查询
查询company与description包含“金融”的数据。
GET /job/_search
{"query": {"multi_match": {"query": "金融","fields": ["company","description"]}}
}
4.9 单字段boolean查询
boolean查询可以使用and
或or
作为条件组合。
要求title同时出现java
与架构师
两个词才满足条件。
GET /job/_search
{"query": {"match": {"title": {"query": "java 架构师","operator": "and"}}}
}
5.范围查询
查询薪水在5000
~10000
之间的数据。
GET /job/_search
{"query": {"range": {"salary": [{"gte":5000,"lte":10000}]}}
}
只要和文档数据产生交集便会被选中。
6.bool字段复合查询
bool把各种查询条件通过must(与)、must_not(非)、should(或)的方式进行组合
GET /job/_search
{"query": {"bool": {"must": [{"match": {"company": "咨询"}}],"should":[{"match": {"company": "金融"}}],"must_not":[{"match": {"company": "科技"}}]}}
}
7.高亮
服务端搜索数据,得到搜索结果,将搜索到的关键字部分加上约定好的标签,前端页面提前写好标签的CSS样式,即可高亮。
在使用match查询的同时,加上一个highlight属性:
-
pre_tags:前置标签
-
post_tags:后置标签
-
fields:需要高亮的字段
GET /job/_search
{"query": {"match": {"description": "springmvc"}},"highlight": {"pre_tags": "<font color='red'>","post_tags": "</font>","fields": {"description": {}}}
}
8.term查询
term主要用于分词精确匹配,如字符串、数值、日期等未分词的数据。
GET /job/_search
{"query": {"term": {"city": {"value": "北京"}}}
}
如下查询,得到的结果是0条数据。原因就是ES默认采用Standard Analyzer
分词策略。英文按单词切分,中文字段分成一个一个汉字。
GET /job/_search
{"query": {"term": {"title": {"value": "工程师"}}}
}
查看分词效果:
GET _analyze
{"analyzer": "standard","text": "java开发工程师"
}
种分词策略对中文关键字搜索很不友好,推荐IK 分词器