【ElasticSearch入门】- imooc
ElasticSearch是一个分布式、可扩展、实时的搜索与数据分析引擎。能从项目一开始就赋予你的数据以搜索、分析和探索的能力。
什么是ElasticSearch
- 基于Apache Lucene构建的开源搜索引擎
- 采用Java编写,提供简单易用的RESTful API
RESTful API简单的说就是: URI表示资源,HTTP协议动词(GET、POST、PUT/PATCH、DELETE)表示对资源的操作的一系列约束和属性(客户端与服务器之间交互方式的一种设计风格)
- 支持横向扩展,以及PB级别的结构化或非结构化数据处理
应用场景
▪ 海量数据分析引擎
▪ 站内搜索引擎
▪ 数据仓库
一线公司实际应用场景
▫ Wikipedia、GitHub - 站内实时搜索
▫ 百度 - 实时日志监控平台
安装
单实例安装
🔹 ElasticSearch Download:https://www.elastic.co/cn/downloads/elasticsearch
安装:

效果:


快捷键: 【Ctrl + C】关闭ElasticSearch进程
实用插件Head安装
🔶 elasticsearch-head-master.zip Download: https://codeload.github.com/mobz/elasticsearch-head/zip/master
🔺 解压: master.zip

🔺 验证head安装环境:

🔺 安装Head
npm installfrom master directory

- install result

- 启动: http://localhost:9100/

此时显示 “cluster health: not connected” 未连接因为需要打开ElasticSearch服务(Head插件和ElastichSearch处在两个不同的进程之中)
- 打开ElasticSearch服务并做相应配置
💠 配置 D:\DevToolsUnit\Tool_ElasticSearch\elasticsearch-7.9.3\config\elasticsearch.yml文件

💠 后台启动 D:\DevToolsUnit\Tool_ElasticSearch\elasticsearch-7.9.3> bin/elasticsearch
- 安装插件后执行效果

分布式安装
配置集群master
- 配置 D:\DevToolsUnit\Tool_ElasticSearch\elasticsearch-7.9.3\config\elasticsearch.yml文件

- 重新启动ElasticSearch服务:
bin/elasticsearch

- 通过 127.0.0.1:9100 打开ElasticSearch服务查看当前集群信息

配置哨兵 slave01、slave02
前期配置将
D:\DevToolsUnit\Tool_ElasticSearch\elasticsearch-7.9.3复制到两个文件夹下分别是:elasticsearch-slave01和elasticsearch-slave02
- 配置哨兵 slave01的elasticsearch.yml文件

- 开启slave01的服务


此时的默认端口设置是
head插件端口: 9100
master端口: 9200 slave01端口: 9201 slave02端口: 9202
- 最后效果
❌产生错误的地方✔: ElasticSearch建立集群结点无法显示在head一个页面中
显示集群和两个结点
基础概念
索引: 含有相同属性的文档集合
类型: 索引可以定义一个或多个类型,文档必须属于一个类型
文档: 文档是可以被索引的基本数据单位
分片: 每个索引都有多个分片,每个分片是一个Lucene索引
备份: 拷贝一份分片就完成了分片的备份
索引创建
API基本格式: http://<ip>:<port>/<索引>/<类型>/<文档id>
常用HTTP动词:GET、POST、PUT、DELETE
-
创建索引(索引名称必须小写)

-
索引展示

索引的创建
-
非结构化索引创建

-
结构化索引创建 (存在问题❓)
如何创建结构化索引?
❌产生错误的地方✔: Types cannot be provided in put mapping requests, unless the include_type_name parameter is set to ... 》》》 原因是:
这个是因为elasticsearch7.0 之后不支持type导致的…, 由于写法是低版本的elasticsearch的,高版本要求传入一个include_type_name参数,值为true。所以加上一个参数即可。eg:_mapping?include_type_name=true
版本问题: https://blog.csdn.net/cnweike/article/details/79223542
插入
插入
- 指定文档id插入
插入结果:
- 自动产生文档id插入

插入结果:

修改
修改
-
直接修改文档

-
脚本修改文档

加上参数的形式

删除
- 删除文档

- 删除索引

- 在POSTMAN中删除索引

查询
-
简单查询(GET)

-
条件查询(POST)
需要在要查询的索引路径后面加上:
/_search
eg: 
第一种: 查询所有数据

第二种: 设置参数返回指定条数据

第三种: 设置参数实现关键词查询

第四种: 根据日期降序排序记录

- 聚合查询

高级查询
- 子条件查询: 特定字段查询所指特定值
【query context】
Query Context 在查询过程中,除了判断文档是否满足查询条件外,ES会计算一个
_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好 - 匹配程度的吻合。
💊 全文本查询 针对文本类型数据
💧匹配指定关键字

💧匹配字段(非固定词组)
"query": {
"match": {
"title": "实用教程"
}
}
match和match_phrase之间的区别在于: 使用match将匹配所有还有“实用教程”其中要给字的数据都给取出来,而match_phrase将匹配固定词组即给出的词组是什么就匹配什么
💧匹配字段(固定词组)
{
"query": {
"match_phrase": {
"title": "实用教程"
}
}
}
💧匹配多个字段
{
"query": {
"multi_match": {
"query": "瓦力",
"fields": ["author", "title"]
}
}
}

💧语法查询
{
"query": {
"query_string": {
"query": "ElasticSearch AND 框架"
}
}
}

{
"query": {
"query_string": {
"query": "(ElasticSearch AND 框架) OR UML"
}
}
}

{
"query": {
"query_string": {
"query": "瓦力 OR ElasticSearch",
"fields": ["title", "author"]
}
}
}
🎯 字段级别查询 针对结构化数据,eg: 💥数字、💥日期等
💮 关键字段查询 - "term"
{
"query": {
"term": {
"word_count": 3200
}
}
}

{
"query": {
"term": {
"publish_date": "2018-01-03"
}
}
}

💮 范围查询 - "range"
【
gt->>】 greater than
【gte->>=】greater than or equal to
【lt-><】less than
【lte-><=】less than or equal to
【eq->=】 equal to
{
"query": {
"range": {
"word_count": {
"gte": 1000,
"lte": 10000
}
}
}
}

{
"query": {
"range": {
"publish_date": {
"gt": "2010-01-01",
"lt": "2020-01-01" /*如何想要表示现在的时间可以实用 ===》 now*/
}
}
}
}

【filter context】
filter context 在查询过程中,只会判断该文档是否满足条件,只有Yes或No
{
"query": {
"bool": {
"filter": { <!--filter只是做数据过滤的,会对查询到的结果进行缓存 但是 filter要结合bool一起实用-->
"term": {
"word_count": 3200
}
}
}
}
}
复合条件查询: 以一定的逻辑组合子条件查询
🍳 常用查询:
🍥固定分数查询
{
"query": {
"constant_score": {
"filter": {
"match": {
"title": "ElasticSearch"
}
},
"boost": 2 // 此处可以更改score分数
}
}
}

🍥布尔查询: bool -> should -> must
{
"query": {
"bool": {
"should": [ // 应当满足的条件
{
"match": {
"author": "瓦力"
}
},
{
"match": {
"title": "ElasticSearch"
}
}
]
}
}
}

{
"query": {
"bool": {
"must": [ // 设置必须满足的条件
{
"match_phrase": {
"title": "ElasticSearch-learning"
}
}
]
}
}
}

{
"query": {
"bool": {
"must_not": [ // 设置一定不能满足的条件
{
"match": {
"author": "瓦力" // 我看谁的书就是不看瓦力的书!!!😜
}
}
]
}
}
}













浙公网安备 33010602011771号