1,课程回顾 2,本章重点 3,具体内容 3.1 kibana的简介和使用 简介: Kibana 是通向 Elastic 产品集的窗口。 它可以在 Elasticsearch 中对数据进行视觉探索和实时分析。 Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索,查看,用来交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。 解压配置: 下载上传文件到虚拟机 解压: tar -xzvf kibana-6.4.0-linux-x86_64.tar.gz -C /usr/ 改名: mv /usr/kibana-6.4.0-linux-x86_64/ /usr/kibana 配置环境变量: vim /etc/profile source /etc/profile 修改配置: cd /usr/kibana vim config/kibana.yml :2 端口号 :7 主机IP :28 es url地址
启动访问(不兼容360浏览器):
kibana (配置过环境变量,非守护运行) ctrl+c 直接关闭
kibana & (守护方式运行) 关闭麻烦点
ps -ef |grep kibana 查找进程
kill -9 xxxx 杀死进程
启动完毕,显示: server running at http://192.168.23.211:5601 3.2 创建,修改和删除索引及数据的增删改查: 数据类型 核心类型(Core datatype) 字符串:string,string类型包含 text 和 keyword。
text:该类型被用来索引长文本,在创建索引前会将这些文本进行分词,转化为词的组合,建立 索引;允许es来检索这些词,text类型不能用来排序和聚合。例如电子邮件主体部分或者一款产品的介绍
keyword:该类型不需要进行分词,可以被用来检索过滤、排序和聚合, 可以满足电子邮箱地址、主机名、状态码、邮政编码和标签等数据的要求。
数值型:long、integer、short、byte、double、float
日期型:date
布尔型:boolean
二进制型:binary https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html 索引的管理: 创建索引的语法
PUT /my_index
{
“settings”: { … any settings … },
“mappings”: {
“type_one”: { … any mappings … },
“type_two”: { … any mappings … },//6.0之前的版本可以
…
}
}
mappings: 映射(Mapping) 相当于数据表的表结构
number_of_shards:每个索引的主分片数,这个配置在索引创建后不能修改。默认值为5
number_of_replicas:每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
创建索引的示例
PUT /index_hr
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
},
"mappings":{
"emp_type":{
"properties":{
"empno":{
"type":"integer"
},
"ename":{
"type":"keyword"
},
"job":{
"type":"keyword"
},
"salary":{
"type":"double"
},
"deptno":{
"type":"integer"
},
"hiredate":{
"type":"date"
}
}
}
}
}
成功返回:
{"acknowledged":true,"shards_acknowledged":true,"index":"my_index"}
GET _all/ 查看所有索引
GET _all/_settings 查看索引配置
创建索引时如果503(master_not_discovered_exception)
删除集群各节点下的data下的数据
rm -rf /usr/elasticsearch/data/*
重启集群
2、修改索引
PUT /my_index/_settings
{
"number_of_replicas": 1
}
{"acknowledged":true}
3、删除索引
DELETE /my_index //删除单个索引
DELETE /index_one,index_two //删除多个索引
DELETE /index_* //删除以index_开头的索引
DELETE /_all //删除所有索引
{"acknowledged":true}
可以设置下面的属性,使DELETE /_all 失效,必须指定索引名称,才可以删除。
elasticsearch.yml
action.destructive_requires_name: true
数据管理: 1,插入数据 指定ID插入: post 192.168.23.30:9200/my_index/my_doc/1 { “my_field”:“aaa” }
返回:
{"_index":"my_index","_type":"my_type","_id":"1","_version":1,"result":"created","_shards":{"total":1,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
不指定ID插入:
返回:
{"_index":"my_index","_type":"my_type","_id":"s40HiGwBg5JLnGO8RVwg","_version":1,"result":"created","_shards":{"total":1,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
2,查询数据:
查询所有
/index_hr/_search 注意传递的参数{}
带参数查询:
get 192.168.23.30:9200/index_hr/_search?q=ename:lisi
指定id查询:
get 192.168.23.30:9200/index_hr/emp_type/2
3,更新数据:
根据ID更新post 192.168.182.66:9200/index_hr/emp_type/1
自动生成ID更新
post 192.168.23.30:9200/my_index/my_type/s40HiGwBg5JLnGO8RVwg4 ,删除数据
根据id删除delete 192.168.182.66:9200/index_hr/emp_type/1
再次查询
{“_index”:“my_index”,“_type”:“my_type”,“_id”:“s40HiGwBg5JLnGO8RVwg”,“found”:false}3.7 springboot整合es
pom.xml(springboot版本不使用最新的 建议:2.1.6.RELEASE)
org.springframework.boot
spring-boot-starter-data-elasticsearch application.properties 配置:spring.data.elasticsearch.cluster-name=my-application
#9200 http请求端口
#9300 java 链接es的端口
spring.data.elasticsearch.cluster-nodes=192.168.23.81:9300 entity:package com.aaa.sbm.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;import java.util.Date;
/**
• fileName:Order
• description:
• author:zz
• createTime:2019/8/16 9:39
• version:1.0.0
*/
@Document(indexName =“index_order”,type = “order_type”,shards = 3,replicas = 1)
public class Order {
@Id
private long id;
private String orderNo;
private String orderName;
private String orderTime;
private Integer customId;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public String getOrderTime() {
return orderTime;
}
public void setOrderTime(String orderTime) {
this.orderTime = orderTime;
}
public Integer getCustomId() {
return customId;
}
public void setCustomId(Integer customId) {
this.customId = customId;
}
@Override
public String toString() {
return “Order{” +
“id=” + id +
“, orderNo='” + orderNo + ‘’’ +
“, orderName='” + orderName + ‘’’ +
“, orderTime=” + orderTime +
“, customId=” + customId +
‘}’;
}
}dao:
package com.aaa.sbm.esdao;import com.aaa.sbm.entity.Order;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;/**
• fileName:OrderEsDao
• description:
• author:zz
• createTime:2019/8/16 9:53
• version:1.0.0
*/
public interface OrderEsDao extends ElasticsearchRepository<Order,Long> {
}service:
package com.aaa.sbm.service;
import com.aaa.sbm.entity.Order;
import java.util.List;
/**
• fileName:OrderService
• description:
• author:zz
• createTime:2019/8/16 9:59
• version:1.0.0
*/
public interface OrderService {
/**• 带参查询order列表
• @param param
• @return
*/
List getList(String param,int type);/**
• 向索引中添加数据
• @param order
• @return
/
int save(Order order);
/*• 向索引中修改数据
• @param order
• @return
/
int update(Order order);
/*• 向索引中删除数据
• @id
• @return
*/
int delete(long id);
}package com.aaa.sbm.service;
import com.aaa.sbm.entity.Order;
import com.aaa.sbm.esdao.OrderEsDao;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;/**
• fileName:OrderServiceImpl
• description:
• author:zz
• createTime:2019/8/16 10:29
• version:1.0.0
*/
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderEsDao orderEsDao;
@Override
public List getList(String param,int type) { QueryBuilder queryBuilder = null;
if(type==0){
//查询所有
queryBuilder = QueryBuilders.matchAllQuery();
}else if(type==1&&!StringUtils.isEmpty(param)){ //查询匹配的单个列的值
//类似于mybatis中 orderName =#{param}
queryBuilder = QueryBuilders.matchQuery("orderName",param);
}else if(type==2&&!StringUtils.isEmpty(param)){//查询order中所有为字符串的匹配值
// 类似于mybatis中 (orderNo =#{param} or orderName =#{param})
queryBuilder = QueryBuilders.multiMatchQuery(param,"orderNo","orderName",);
}else if(type==3&&!StringUtils.isEmpty(param)){//单列模糊查询
//类似于mybatis中 orderName like '%${param}%'
queryBuilder = QueryBuilders.wildcardQuery("orderName","*"+param+"*");
}
//获取order对象迭代集合
Iterable<Order> search = orderEsDao.search(queryBuilder);
//返回迭代器
Iterator<Order> iterator = search.iterator();
//定义返回对象
List<Order> orders = new ArrayList<>();
//迭代对象
while(iterator.hasNext()){
orders.add(iterator.next());
}
return orders;}
@Override
public int save(Order order) {
//向es中存储对象
Order rorder = orderEsDao.save(order);
if(rorder!=null)
return 1;
return 0;
}@Override
public int update(Order order) {
//向es中存储对象
Order rorder = orderEsDao.save(order);
if(rorder!=null)
return 1;
return 0;
}@Override
public int delete(long id) {
try {
orderEsDao.deleteById(id);
return 1;
}catch (Exception e){
e.printStackTrace();
}
return 0;
}
}controller:
package com.aaa.sbm.controller;import com.aaa.sbm.entity.Order;
import com.aaa.sbm.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/**
• fileName:OrderController
• description:
• author:zz
• createTime:2019/8/16 10:59
• version:1.0.0
*/
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
/**• es的order 索引查询
• @param name
• @param type
• @return
*/
@RequestMapping(“orderList”)
public Object list(@RequestParam(required = true,defaultValue =“”) String name,@RequestParam(required = true,defaultValue =“0”) Integer type){
return orderService.getList(name,type);
}/**
• order索引添加
• @param order
• @return
*/
@RequestMapping(“orderAdd”)
public Object add(Order order){
return orderService.save(order);
}/**
• order索引更新
• @param order
• @return
*/
@RequestMapping(“orderUpdate”)
public Object update(Order order){
return orderService.save(order);
}/**
• order索引值的删除
• @param id
• @return
*/
@RequestMapping(“orderDelete”)
public Object delete(Long id){
return orderService.delete(id);
}}
启动类:
package com.aaa.sbm;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;@SpringBootApplication
@MapperScan(“com.aaa.sbm.dao”)
@EnableElasticsearchRepositories(“com.aaa.sbm.esdao”)
public class SpringbootMabatisApplication {public static void main(String[] args) {
SpringApplication.run(SpringbootMabatisApplication.class, args);
}}
测试
http://localhost:8888/orderList //查询时,参数为小写 http://localhost:8888/orderList?name=orderb&type=1 http://localhost:8888/orderList?name=ord10002&type=2 http://localhost:8888/orderList?name=orderb&type=3
http://localhost:8888/orderDelete?id=4
4,知识点总结 5,本章面试题