Elasticsearch全文搜索技术之二kibana的简介和使用

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch全文搜索技术之二kibana的简介和使用

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/s40HiGwBg5JLnGO8RVwg

4 ,删除数据

根据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 {
}
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*/@RestControllerpublic class OrderController {@Autowiredprivate 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/orderAdd?id=4&orderNo=ord100022&orderName=orderaa&orderTime=2019-08-16&customId=2

http://localhost:8888/orderUpdate?id=4&orderNo=ord100022&orderName=orderaa&orderTime=2019-08-16&customId=2

http://localhost:8888/orderDelete?id=4

4,知识点总结

5,本章面试题

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
1月前
|
存储 运维 监控
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
本文解析了Elasticsearch Serverless在智能日志分析领域的关键技术、优势及应用价值。
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
|
13天前
|
自然语言处理 监控 数据可视化
|
17天前
|
存储 监控 安全
|
1月前
|
自然语言处理 搜索推荐 关系型数据库
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
这篇文章是关于Elasticsearch全文搜索引擎的学习指南,涵盖了基本概念、命令风格、索引操作、分词器使用,以及数据的增加、修改、删除和查询等操作。
21 0
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
|
1月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
119 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
1月前
|
运维 监控 数据可视化
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
63 1
|
1月前
|
开发框架 监控 搜索推荐
GoFly快速开发框架集成ZincSearch全文搜索引擎 - Elasticsearch轻量级替代为ZincSearch全文搜索引擎
本文介绍了在项目开发中使用ZincSearch作为全文搜索引擎的优势,包括其轻量级、易于安装和使用、资源占用低等特点,以及如何在GoFly快速开发框架中集成和使用ZincSearch,提供了详细的开发文档和实例代码,帮助开发者高效地实现搜索功能。
121 0
|
1月前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
86 0
|
2月前
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入