【ElasticSearch入门】- imooc

ElasticSearch是一个分布式、可扩展、实时的搜索与数据分析引擎。能从项目一开始就赋予你的数据以搜索、分析和探索的能力。

什么是ElasticSearch

  1. 基于Apache Lucene构建的开源搜索引擎
  2. 采用Java编写,提供简单易用的RESTful API

RESTful API简单的说就是: URI表示资源,HTTP协议动词(GET、POST、PUT/PATCH、DELETE)表示对资源的操作的一系列约束和属性(客户端与服务器之间交互方式的一种设计风格)

  1. 支持横向扩展,以及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

  1. npm install from master directory
  2. install result
  3. 启动: http://localhost:9100/

此时显示 “cluster health: not connected” 未连接因为需要打开ElasticSearch服务(Head插件和ElastichSearch处在两个不同的进程之中)

  1. 打开ElasticSearch服务并做相应配置

💠 配置 D:\DevToolsUnit\Tool_ElasticSearch\elasticsearch-7.9.3\config\elasticsearch.yml文件

💠 后台启动 D:\DevToolsUnit\Tool_ElasticSearch\elasticsearch-7.9.3> bin/elasticsearch

  1. 安装插件后执行效果

分布式安装

配置集群master

  1. 配置 D:\DevToolsUnit\Tool_ElasticSearch\elasticsearch-7.9.3\config\elasticsearch.yml文件
  2. 重新启动ElasticSearch服务: bin/elasticsearch
  3. 通过 127.0.0.1:9100 打开ElasticSearch服务查看当前集群信息

配置哨兵 slave01、slave02

前期配置将D:\DevToolsUnit\Tool_ElasticSearch\elasticsearch-7.9.3复制到两个文件夹下分别是: elasticsearch-slave01elasticsearch-slave02

  1. 配置哨兵 slave01的elasticsearch.yml文件
  2. 开启slave01的服务

此时的默认端口设置是
head插件端口: 9100
master端口: 9200 slave01端口: 9201 slave02端口: 9202

  1. 最后效果

❌产生错误的地方✔: ElasticSearch建立集群结点无法显示在head一个页面中

显示集群和两个结点

基础概念

索引: 含有相同属性的文档集合
类型: 索引可以定义一个或多个类型,文档必须属于一个类型
文档: 文档是可以被索引的基本数据单位
分片: 每个索引都有多个分片,每个分片是一个Lucene索引
备份: 拷贝一份分片就完成了分片的备份

索引创建

API基本格式: http://<ip>:<port>/<索引>/<类型>/<文档id>
常用HTTP动词:GET、POST、PUT、DELETE

  1. 创建索引(索引名称必须小写)

  2. 索引展示

索引的创建

  1. 非结构化索引创建

  2. 结构化索引创建 (存在问题❓)
    如何创建结构化索引?

❌产生错误的地方✔: 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

插入

插入

  1. 指定文档id插入



插入结果:

  1. 自动产生文档id插入

    插入结果:

修改

修改

  1. 直接修改文档

  2. 脚本修改文档

    加上参数的形式

删除

  1. 删除文档
  2. 删除索引
  3. 在POSTMAN中删除索引

查询

  1. 简单查询(GET)

  2. 条件查询(POST)

需要在要查询的索引路径后面加上: /_search
eg: ![](https://im

g2020.cnblogs.com/blog/2104219/202011/2104219-20201107095457546-1221407586.png)
第一种: 查询所有数据

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

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

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

  1. 聚合查询

高级查询

  1. 子条件查询: 特定字段查询所指特定值

【query context】

Query Context 在查询过程中,除了判断文档是否满足查询条件外,ES会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好 - 匹配程度的吻合。

💊 全文本查询 针对文本类型数据

💧匹配指定关键字

💧匹配字段(非固定词组)

"query": {
        "match": { 
            "title": "实用教程"
        }
    }

matchmatch_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": "瓦力"  // 我看谁的书就是不看瓦力的书!!!😜
                    }
                }
            ]
        }
    }
}

posted @ 2020-11-25 10:39  Felix_Openmind  阅读(218)  评论(0)    收藏  举报
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}