ELK-全文检索技术-kibana操作elasticsearch
前言:建议kibana语法一定要学好!
1 软件安装
1.1 ES的安装
第一步:解压压缩包,放到一个没有中文没有空格的位置

第二步:修改配置文件
1、 jvm.options 第22和23行
-Xms128m
-Xmx128m
2、 elasticsearch.yml 第33行和37行
path.data: D:\class96\elasticsearch-6.2.4\data
#
# Path to log files:
#
path.logs: D:\class96\elasticsearch-6.2.4\logs
第三步:直接双击批处理文件

效果如下:

两个端口号
9200 http协议的端口号
9300 tcp协议的端口号
使用http访问

1.2 安装操作ES的客户端软件Kibana
需要说明的是:
1、Kibana软件的版本一定要和ES的版本保持一致
2、Kibana需要依赖nodejs的环境
第一步:安装nodejs
双击安装

验证安装效果
Dos窗口中输入 node –v
第二步:安装kibana,解压

第三步:构建kibana和ES的关联关系

第21行
elasticsearch.url: http://localhost:9200
第四步:启动kibana
双击启动

1.3 安装IK分词器
第一步:解压

第二步:把改完名为ik的文件夹直接拷贝到es软件的plugins文件夹下

第三步:重启ES软件
第四步:在kibana中测试
IK分词器提供了两种分词效果
Ik_max_word

Ik_smart

2 了解几个概念
|
mysql数据库 |
ES |
|
Database |
Indices index的复数 |
|
Table |
Type 一般一个索引库中只有一个type |
|
数据 |
Document |
|
约束 列存储什么数据类型之类的 |
Mapping 规定字段什么数据类型、什么分词器 |
|
Column |
Field |
3 Kibana的操作
1.4 操作索引库index
创建索引库 heima代表一个索引库的名称
put heima
get heima
delete heima
1.5 操作映射和类型
比如:创建一个商品类型goods 有一下字段 goodsName price image
1、创建类型并且制定每个字段的属性(数据类型、是否存储、是否索引、哪种分词器)
put heima/_mapping/goods
{
"properties":{
"goodsName":{
"type":"text",
"analyzer":"ik_max_word",
"index":true,
"store":true
},
"price":{
"type":"double",
"index":true,
"store":true
},
"image":{
"type":"keyword",
"index":false,
"store":true
}
}
}
2、查看映射
get heima/_mapping[/goods]
3、 一起创建索引库和映射+类型
put heima2
{
"mappings": {
"goods": {
"properties": {
"goodsName": {
"type": "text",
"store": true,
"analyzer": "ik_max_word"
},
"image": {
"type": "keyword",
"index": false,
"store": true
},
"price": {
"type": "double",
"store": true
}
}
}
}
}
1.6 操作document
1.6.1 不指定id的新增
post heima/goods
{
"goodsName":"小米6X手机",
"price":1199,
"image":"http://image.im.com/123.jpg"
}
效果:

根据id查询文档
get heima/goods/MaZWNmwBTaoWGIHgAuHg
1.6.2 指定id的新增

1.6.3 修改
put heima/goods/2
{
"goodsName":"小米6X手机",
"price":1199,
"image":"http://image.im.com/123.jpg"
}
使用put和post是一样的效果 根据id修改,如果没有id就是新增
1.6.4 删除
DELETE heima/goods/MaZWNmwBTaoWGIHgAuHg
DELETE heima/goods/1
1.6.5 自定义模板(了解)
put heima3
{
"mappings": {
"goods": {
"properties": {
"goodsName": {
"type": "text",
"store": true,
"analyzer": "ik_max_word"
},
"image": {
"type": "keyword",
"index": false,
"store": true
},
"price": {
"type": "double",
"store": true
}
},
"dynamic_templates":[
{
"myString":{
"match_mapping_type":"string",
"mapping":{
"type":"keyword"
}
}
}
]
}
}
}
新增数据
get heima3/_mapping
{
"goodsName":"小米6X手机",
"price":1199,
"image":"http://image.im.com/123.jpg",
"brand":"小米"
}
查看brand的映射

2 查询(重点)
2.1 MatchAll
get heima/_search
{
"query":{
"match_all": {}
}
}
2.1 Term
get heima/_search
{
"query":{
"term": {
"goodsName":"小米"
}
}
}
2.2 分词match
get heima/_search
{
"query":{
"match": {
"goodsName": "小米手机"
}
}
}
2.3 Range范围查询
get heima/_search
{
"query":{
"range": {
"price": {
"gte": 100,
"lte": 1000
}
}
}
}
2.4 Fuzzy容错
get heima/_search
{
"query":{
"fuzzy": {
"goodsName": {
"value": "大米",
"fuzziness": 1
}
}
}
}
2.5 Bool组合查询
get heima/_search
{
"query":{
"bool":
{
"must": {"match":{"goodsName":"手机"}},
"must_not": {"range":{"price": {
"gte": 100,
"lte": 1000
}
}
}
}
}
}
3 过滤(重点)
3.1
、显示字段的过滤
get heima/_search
{
"_source":{
"excludes":["goodsName"] //排除
不显示goodsName
"includes":["goodsName"] //只显示goodsName
},
"query":{
"match_all": {}
}
}
}
3.2
、查询结果的过滤
get heima/_search
{
"query":{
"bool": {
"must":
{"term":{"goodsName":"手机"}},
"filter": {
"range": {
"price": {
"gte": 2000,
"lte": 5000
}
}
}
}
}
}
}
4
分页 和mysql分页一致的(重点)
get heima/_search
{
"query":{
"match_all": {}
},
"from":0, 起始位置 和mysql一样 (当前页-1)*size
"size":2
}
}
5
排序(重点)
get heima/_search
{
"query":{
"match_all": {}
},
"from":0,
"size":10,
"sort":{
"price":"desc"
}
}
}
6
高亮(重点)
get heima/_search
{
"query":{
"term": {
"goodsName": "小米"
}
},
"highlight":{
"pre_tags": "<font style='color:red'>",
"post_tags": "</font>",
"fields": {
"goodsName": {}
}
}
}
}
7
聚合(了解)
Min max count avg sum group by
桶: 就是group by 根据什么分组
度量:聚合函数的结果
3.3
创建测试数据
1、测试数据:
PUT /car
{
"mappings": {
"orders": {
"properties": {
"color": {
"type": "keyword"
},
"make": {
"type": "keyword"
}
}
}
}
}
POST /car/orders/_bulk
{ "index": {}}
{ "price" : 10000,
"color" : "红", "make" : "本田", "sold" : "2014-10-28" }
{ "index": {}}
{ "price" : 20000,
"color" : "红", "make" : "本田", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 30000,
"color" : "绿", "make" : "福特", "sold" : "2014-05-18" }
{ "index": {}}
{ "price" : 15000,
"color" : "蓝", "make" : "丰田", "sold" : "2014-07-02" }
{ "index": {}}
{ "price" : 12000,
"color" : "绿", "make" : "丰田", "sold" : "2014-08-19" }
{ "index": {}}
{ "price" : 20000,
"color" : "红", "make" : "本田", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 80000,
"color" : "红", "make" : "宝马", "sold" : "2014-01-01" }
{ "index": {}}
{ "price" : 25000,
"color" : "蓝", "make" : "福特", "sold" : "2014-02-12" }
Term的聚合:根据color分组
3.4
演示聚合
get /car/orders/_search
{
"size":0,
"aggs":{
"populor_color":{
"terms": {
"field": "color",
"size": 10
}
}
}
}
3.5
聚合中计算平均值
get /car/orders/_search
{
"size":0,
"aggs":{
"populor_color":{
"terms": {
"field": "color",
"size": 10
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
8
使用java操作ES
Java代码操作ES有三种方式
1、ES原生api
2、ES rest风格api
3、SpringDataElasticSearch框架操作ES
https://www.elastic.co/guide/en/elasticsearch/client/index.html
第一步:创建maven项目
导入两个依赖
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.2.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.35</version>
</dependency>
</dependencies>
第二步:在代码中准备client
public class EsManager {
private TransportClient
client = null;
@Before
public
void init() throws Exception{
client
= new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
}
@After
public
void end(){
client.close();
}
}
第三步:各种查询
@Test
public void queryTest()
throws Exception{
//
QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
// QueryBuilder queryBuilder =
QueryBuilders.matchQuery("goodsName","小米手机");
// QueryBuilder queryBuilder =
QueryBuilders.termQuery("goodsName","小米");
// FuzzyQueryBuilder queryBuilder
= QueryBuilders.fuzzyQuery("goodsName", "大米");
//
queryBuilder.fuzziness(Fuzziness.ONE);
// QueryBuilder queryBuilder =
QueryBuilders.rangeQuery("price").gte(1000).lte(2000);
BoolQueryBuilder
queryBuilder = QueryBuilders.boolQuery();
queryBuilder.must(QueryBuilders.rangeQuery("price").gte(1000).lte(8000));
queryBuilder.mustNot(QueryBuilders.termQuery("goodsName",
"华为"));
SearchResponse searchResponse = client.prepareSearch("heima").setQuery(queryBuilder).get();
SearchHits searchHits =
searchResponse.getHits();
long totalHits
= searchHits.getTotalHits();
System.out.println("总记录数:"+totalHits);
SearchHit[] hits =
searchHits.getHits();
for (SearchHit
hit : hits) {
String sourceAsString =
hit.getSourceAsString();
Goods goods =
JSON.parseObject(sourceAsString, Goods.class);
System.out.println(goods);
}
}
ELK-全文检索技术-kibana操作elasticsearch的更多相关文章
- 使用kibana操作elasticsearch实现增删改查
本篇博客,本人写的是方法,大家将对应的字段放入对应的位置就可以了 注:elasticsearch中,索引相当于MySQL中的数据库,类型相当于数据库中的表,即索引名就为数据库库名,类型就为表名 1.创 ...
- Linux下,非Docker启动Elasticsearch 6.3.0,安装ik分词器插件,以及使用Kibana测试Elasticsearch,
Linux下,非Docker启动Elasticsearch 6.3.0 查看java版本,需要1.8版本 java -version yum -y install java 创建用户,因为elasti ...
- elk快速入门-在kibana中如何使用devtools操作elasticsearch
在kibana中如何使用devtools操作elasticsearch:前言: 首先需要安装elasticsearch,kibana ,下载地址 https://www.elastic.co/cn/d ...
- Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查
今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...
- windows系统中 利用kibana创建elasticsearch索引等操作
elasticsearch之借用kibana平台创建索引 1.安装好kibana平台 确保kibana以及elasticsearch正常运行 2.打开kibana平台在Dev Tools 3.创建一个 ...
- Kibana基础之直接操作ElasticSearch
1.入门级别操作 Elasticsearch采用Rest风格API,其API就是一次http请求,你可以用任何工具发起http请求 创建索引的请求格式: 请求方式:PUT 请求路径:/索引库名 请求参 ...
- net平台下c#操作ElasticSearch详解
net平台下c#操作ElasticSearch详解 ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense Elasti ...
- java操作elasticsearch实现基本的增删改查操作
一.在进行java操作elasticsearch之前,请确认好集群的名称及对应的ES节点ip和端口 1.查看ES的集群名称 #进入elasticsearch.yml配置文件/opt/elasticse ...
- ElasticSearch-.net平台下c#操作ElasticSearch详解
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
随机推荐
- 把execel表数据导入mysql数据库
今天,是我来公司第二周的第一天. 作为新入职的实习生,目前还没适合我的实质项目工作,今天的学习任务是: 把execel表数据导入到mysql数据库,再练习下java操作JDBC. 先了解下execel ...
- 云服务器搭建anaconda pytorch torchvision
(因为在普通用户上安装有些权限问题安装出错,所以我在root用户下相对容易安装,但是anaconda官网说可以直接在普通用户下安装,不过,在root下安装,其他用户也是能用的. 访问Anaconda官 ...
- spark MLlib 概念 6:ALS(Alternating Least Squares) or (ALS-WR)
Large-scale Parallel Collaborative Filtering for the Netflix Prize http://www.hpl.hp.com/personal/Ro ...
- jdbcTemplate的queryForList的使用方法
jdbcTemplate的queryForList的使用方法如下,它不一样的地方是,它获得的结果,会再放到一个map里去: List rows = jdbcTemplate.queryForList( ...
- BOSCH汽车工程手册————自适应巡航速度控制ACC
驾驶员通过自动速度控制器操纵键,将汽车行驶速度控制在预设的期望速度上. ACC系统则在自动速度控制的基础上检测本车到前面行驶汽车的距离以及相对速度,以及其他车道上的信息. 利用这些数据就能控制两车之间 ...
- leetcode 198. House Robber 、 213. House Robber II 、337. House Robber III 、256. Paint House(lintcode 515) 、265. Paint House II(lintcode 516) 、276. Paint Fence(lintcode 514)
House Robber:不能相邻,求能获得的最大值 House Robber II:不能相邻且第一个和最后一个不能同时取,求能获得的最大值 House Robber III:二叉树下的不能相邻,求能 ...
- 浏览器端-W3School-JavaScript:JavaScript 事件参考手册
ylbtech-浏览器端-W3School-JavaScript:JavaScript 事件参考手册 1.返回顶部 1. JavaScript 事件参考手册 事件通常与函数配合使用,这样就可以通过发生 ...
- React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定
1.案例实现代码 import React, { Component } from 'react'; /** * 事件对象.键盘事件.表单事件.ref获取dom节点.react实现类似Vue双向数据绑 ...
- properties文件的加载方式
下面1-4的内容是网上收集的相关知识,总结来说,就是如下几个知识点: 最常用读取properties文件的方法 InputStream in = getClass().getResourceAsStr ...
- PP相关号码范围IMG设定
一.定义订单号码范围——CO82 IMG> 生產> 現埸控制 > 主檔資料 > 訂單 > 定義訂單號碼範圍 可看到目前工單所訂義的區間(注意, 工單的號碼區間和CO的內部 ...