elk mysql 全文索引_ELK-全文检索技术-kibana操作elasticsearch

前言:建议kibana语法一定要学好!

1       软件安装

1.1     ES的安装

第一步:解压压缩包,放到一个没有中文没有空格的位置

3563ed37deaa07813baa94fbfb8067db.png

第二步:修改配置文件

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

第三步:直接双击批处理文件

8739f730508a7b19afe5aff433a11edd.png

效果如下:

49319885586bc7134f18102ce235eb53.png

两个端口号

9200  http协议的端口号

9300  tcp协议的端口号

使用http访问

e4aff94d60aa1d4b472de1b0232eea4b.png

1.2              安装操作ES的客户端软件Kibana

需要说明的是:

1、Kibana软件的版本一定要和ES的版本保持一致

2、Kibana需要依赖nodejs的环境

第一步:安装nodejs

双击安装

22afdc7b4487c74b494d504c8bfc2973.png

验证安装效果

Dos窗口中输入 node –v

第二步:安装kibana,解压

cdaec888ded8efffd211a5f25ad7e5e0.png

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

43bcb5e0f3393eccc9d08dca6ada9908.png

第21行

第四步:启动kibana

双击启动

c0a79a6f3975c69b577214f6e070a72d.png

1.3              安装IK分词器

第一步:解压

f03155cc1909ee88fa82d19f269dbd8d.png

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

5fc5ce3afb78b3264be799496aedbcda.png

第三步:重启ES软件

第四步:在kibana中测试

IK分词器提供了两种分词效果

Ik_max_word

502a8301e8ed383ec1558030f4d25181.png

Ik_smart

7ce492d4f5826c0645394b703187da81.png

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"

}

效果:

6226cfbe109f50efefc623e4cff4b1cb.png

根据id查询文档

get heima/goods/MaZWNmwBTaoWGIHgAuHg

1.6.2   指定id的新增

479c78cd9950f3ff274f55cd04d4d709.png

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的映射

e99c4122ce8fcba4de32a2a424bb6254.png

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": "",

"post_tags": "",

"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

第一步:创建maven项目

导入两个依赖

org.elasticsearch.client

transport

6.2.4

junit

junit

4.12

com.alibaba

fastjson

1.2.35

第二步:在代码中准备client

public classEsManager {

privateTransportClient

client= null;

@Before

public

voidinit() throwsException{

client= newPreBuiltTransportClient(Settings.EMPTY)

.addTransportAddress(newTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

}

@After

public

voidend(){

client.close();

}

}

第三步:各种查询

@Test

public voidqueryTest()

throwsException{

//

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();

longtotalHits

= 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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值