当前位置: 代码迷 >> 综合 >> ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
  详细解决方案

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

热度:124   发布时间:2023-09-10 16:19:25.0

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

收起

ElasticSearch

安装elasticsearch

官网:elastic.co

https://www.elastic.co/cn/downloads/elasticsearch

官网下载巨慢,翻墙下载

目录

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

启动,访问9200:
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

访问9200接口:
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

安装elasticsearch-head:

git clone git://github.com/mobz/elasticsearch-head.git

cd elasticsearch-head

npm install

npm run start

open http://localhost:9100/

存在一个9200和9100的跨域问题!

点击链接,报跨域的错!

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

修改elasticsearch中config下的yaml配置文件,修改:

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

重启,连接成功:

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

把索引当做一个数据库!可以建立索引(库),文档(库中的数据!)

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
后面所有的查询,查询功能在Kibana中做!

了解ELK

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

安装Kibana

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

好处:ELK基本上都是拆箱即用

启动测试:点bin下的kibana

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

默认的kibana端口为5601

PS:注意elasticsearch和kibana的版本必须一致 否则出错!

开发工具:(Post curl head 谷歌浏览器插件测试)

汉化,修改kibana yaml中配置 重启,

ES核心概念

  1. 索引
  2. 字段类型(mapping)
  3. 文档(documents)

概述:

集群、节点、索引、类型、文档、分片、映射是什么?

elasticsearch是面向文档,关系型数据库和elasticsearch 客观的对比如下,一切都是JSON!

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

类型示例:

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

IK分词器

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
安装https://github.com/medcl/elasticsearch-analysis-ik/releases

放在elasticsearch的plugin(插件)下

重启观察ES

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

关于elasticsearch中的命令 如elasticsearch-plugin:

命令行输入:

elasticsearch-plugin list

     
  • 1

在kibana中测分词器:

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

我们输入 超级喜欢狂神或java

发现问题:狂神说被拆开了!

这种自己需要的词,需要自己加到我们的分词器字典中!

向ik分词器增加自己的配置

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

重启es、kibana

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

再次测试一下狂神说,看下效果!ik_max_word最细粒度划分

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

以后自定义dic、导入即可!

索引引擎里面最重要的首先就是分词

Rest风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制!

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

基础测试

  1. 创建一个索引!也是在kibana终端中试用版PUT命令
 PUT /test1/type1/1{  "name": "狂神说", "age": "3"} 

     
  • 1
  • 2
  • 3
  • 4

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
完成了自动增加索引!数据也成功的添加了,这就是可以当做数据库看的原因。。

  1. 那么name字段用不用指定类型呢?毕竟我们关系型数据库 是需要指定类型的啊!

    • 字符串类型 text、keyword
    • 数值类型 long、integer、short、byte、double、float、scaled float
    • 日期类型date
    • te布尔值类型boolean
    • 二进制类型binary
    • 等等。。。
  2. 指定字段的类型——创建规则

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

GET命令得到库的信息:

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

  1. 查看默认的信息

通过命令get _cat/可以获得es当前的很多信息!
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

修改 提交还是使用PUT即可!然后覆盖!最新办法

曾经的办法:

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

现在的方法 使用POST:

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

删除索引——DELETE
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

通过DELETE命令实现删除、根据你的请求来判断是删除索引还是删除文档记录!

使用RESTFUL风格是我们ES推荐大家使用的!

关于文档的基本操作(重点):

基本操作:

添加数据

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

更新数据,将小明改成小红

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

PUT更新数据

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

version代表被改变的次数

Post,_update自由度更高,PUT必须一次性修改一个个体的全部内容,但是Post可以选择部分修改!

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

这个和PUT无异,要在后加_update

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

简单的搜索:

GET Kuangshen/user/_search?q=name:狂神说

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

简单的条件查询,可以根据默认的映射规则,产生基本的查询!

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

复杂操作搜索 select(排序,分页,高亮,模糊查询,精准查询)

GET kuangshen/_search

     
  • 1

输出:

{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 5,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "kuangshen","_type" : "user","_id" : "1","_score" : 1.0,"_source" : {"name" : "狂神说","age" : 23,"desc" : "一顿操作猛如虎,一看工资2500","tags" : ["技术宅","温暖","直男"]}},{"_index" : "kuangshen","_type" : "user","_id" : "2","_score" : 1.0,"_source" : {"name" : "张三","age" : 3,"desc" : "法外狂徒","tags" : ["交友","旅游","渣男"]}},{"_index" : "kuangshen","_type" : "user","_id" : "3","_score" : 1.0,"_source" : {"name" : "李四","age" : 30,"desc" : "不知道如何形容","tags" : ["篮球","IT","型男"]}},{"_index" : "kuangshen","_type" : "user","_id" : "4","_score" : 1.0,"_source" : {"name" : "王五","age" : 32,"desc" : "就是一个屌丝","tags" : ["羽毛球","钢琴","渣男"]}},{"_index" : "kuangshen","_type" : "user","_id" : "5","_score" : 1.0,"_source" : {"name" : "狂神说Java8","age" : 34,"desc" : "就是一个大帅哥","tags" : ["围棋","小提琴","暖男"]}}]}
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
GET kuangshen/_search
{"query": {"match": {"name": "狂神"}}
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出:

{"took" : 9,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 2,"relation" : "eq"},"max_score" : 1.9034984,"hits" : [{"_index" : "kuangshen","_type" : "user","_id" : "1","_score" : 1.9034984,"_source" : {"name" : "狂神说","age" : 23,"desc" : "一顿操作猛如虎,一看工资2500","tags" : ["技术宅","温暖","直男"]}},{"_index" : "kuangshen","_type" : "user","_id" : "5","_score" : 1.6534033,"_source" : {"name" : "狂神说Java8","age" : 34,"desc" : "就是一个大帅哥","tags" : ["围棋","小提琴","暖男"]}}]}
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

hit: 索引和文档信息

查询的结果总数

然后就是查询出来的具体文档

数据中的东西都可以遍历出来

分数:通过score判断谁更加符合结果

指定字段查询:

GET kuangshen/_search
{"query": {"match": {"name": "狂神"}},"_source": ["name","desc"]
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

之后使用java操作es,所有的方法和对象就是这里面的key!

复杂操作:

排序

order中的desc降序、asc升序;按照age

GET kuangshen/_search
{"query": {"match": {"name": "狂神"}},"sort": [{"age": {"order": "desc"}}]
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

分页

GET kuangshen/_search
{"query": {"match": {"name": "狂神"}},"sort": [{"age": {"order": "desc"}}],"from": 0,"size": 1
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

From:从第几个数据开始,返回多少条数据(单页面的数据)

数据下标还是从0开始的,和学的所有数据结构是一样的

/search/{current}/{pagesize}

布尔值查询

通过布尔值进行更加精确的查询:多条件精确查询

must命令(相当于mysql的and),即所有条件要同时符合;如果将must改为should(相当于or),则只要满足其一即可;

类似的 must not 查询不是。。

GET kuangshen/user/_search
{"query": {"bool": {"must": [{"match": {"name": "狂神说"}},{"match": {"age": 23}}]}}
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

过滤器(filter)

筛选age范围

GET kuangshen/user/_search
{"query": {"bool": {"must": [{"match": {"name": "狂神"}}],"filter": [{"range": {"age": {"gte": 10,"lte": 40}}}]}}
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • gt 大于
  • gte 大于等于
  • lt 小于
  • lte 小于等于

匹配多个条件

匹配出tags里面只要包含有男的,同时按照上到下分值高到低排列

GET kuangshen/user/_search
{"query": {"match": {"tags": "男 技术"}}
}

     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站

多个条件使用空格隔开

只要满足其中一个结果即可以被查出

这个时候可以通过分值基本的判断

精确查询

term查询是直接通过待排索引指定的词条进行精确的查找的!

关于分词:

term,直接查询精确的

match:会使用分词器解析!(先分析文档,然后再通过分析的文档进行查询!)

两个字段类型text keyword

 #新建dbPUT testdb{"mappings": {"properties": {"name":{"type": "text"},"desc":{"type": "keyword"}      }}}#插入两条数据PUT testdb/_doc/1{"name": "狂神说Java name","desc": "狂神说Java name"}
  相关解决方案