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 分词器