ElasticSearch
2020-04-15 17:39:23 1 举报
AI智能生成
elasticsearch脑图
作者其他创作
大纲/内容
1.Elasticsearch简介
基于Lucene做了一些封装和增强,是一个实时分布式搜索和分析引擎
分析
结构化搜索
全文搜索
2.ES和solr的差别
Solr简介
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化
Solr 索引的实现方法很简单,用 POST方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引。
Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。
Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。
二者对比
安装
es基本是开箱即用,Solr安装略微复杂一丢丢!
管理
Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能
数据格式
Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
功能
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多由第三方插件提供,例如图形化界面需要kibana友好支撑
性能
Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用
ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
热度
Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区。
而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。(Elasticsearch是趋势!)
而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。(Elasticsearch是趋势!)
3.ES安装
目录结构
bin 启动文件
config 配置文件
log4j2 日志配置文件
jvm.options java 虚拟机相关的配置
elasticsearch.yml elasticsearch 的配置文件! 默认 9200 端口! 跨域!
lib 相关jar包
logs 日志!
modules 功能模块
plugins 插件!
config 配置文件
log4j2 日志配置文件
jvm.options java 虚拟机相关的配置
elasticsearch.yml elasticsearch 的配置文件! 默认 9200 端口! 跨域!
lib 相关jar包
logs 日志!
modules 功能模块
plugins 插件!
启动
localhost:9200
可视化界面
安装elasticsearch-head-master
cnpm install
npm run start
解决跨域问题
elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-origin: "*"
重启ES服务,再次连接
4.了解 ELK
Elasticsearch
Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。
Logstash
Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,
经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。
经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。
Kibana
Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
5.Kibana安装
版本
要与ES版本一致
汉化
ikbana.yml
i18n.locale: "zh-CN"
启动并访问
localhost:5601
6.ES核心概念
elasticsearch是面向文档的
意味着索引和搜索数据的最小单位是文档
意味着索引和搜索数据的最小单位是文档
集群
一个人就可以是一个集群!默认的集群名称就是 elaticsearh
集群中可以包含多个索引(数据库)
节点
一个节点就是一个elasricsearch进程
分片
elasticsearch创建索引时,在后台把每个索引划分成多个分片,每个分片可以在集群中的不同服务器间迁移
一个分片是一个Lucene索引,即一个包含倒排索引的文件目录。所以一个elasticsearch索引是由多个Lucene索引组成的
索引
相当于RDB中的数据库
每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)
倒排索引
类型
相当于RDB中的表,是文档的逻辑容器
文档
相当于RBD中的行数据
一句话,ElasticSearch一般会搭建集群,一个集群有多个节点,创建索引的时候,
可以选择分片数和每个分片的副本数,创建的索引分片会分布在不同节点上,避免某个节点挂掉造成数据丢失
可以选择分片数和每个分片的副本数,创建的索引分片会分布在不同节点上,避免某个节点挂掉造成数据丢失
7.ik分词器
安装
重启elasticsearch
解压到elasticsearch安装路径下的plugins文件夹的ik目录中
分词算法
ik_smart 为最少切分
ik_max_word为最细粒度划分!穷尽词库的可能!字典!
添加自定义分词词典
进入ik的config目录,新建一个自定义字典my.dic
配置IKAnalyzer.cfg.xml
<entry key="ext_dict">my.dic</entry>
8.Rest风格操作索引和文档
操作索引
POST
创建文档(随机id)
localhost:9200/索引名称/类型名称
修改文档
localhost:9200/索引名称/类型名称/文档id/_update
查询所有数据
localhost:9200/索引名称/类型名称/_search
DELETE
删除文档
localhost:9200/索引名称/类型名称/文档id
PUT
创建文档(指定id)
localhost:9200/索引名称/类型名称/文档id
GET
通过文档id查询文档
localhost:9200/索引名称/类型名称/文档id
如果自己的文档字段没有指定,那么es 就会给我们默认配置字段类型!
通过get _cat/ 可以获得es的当前的很多信息!
操作文档
添加数据
PUT /kk/user/1
{
"name": "kk",
"age": 22
}
{
"name": "kk",
"age": 22
}
获取数据
GET /kk/user/1
更新数据
PUT
PUT /kk/user/1
{
"name": "kk",
"age": 18
}
{
"name": "kk",
"age": 18
}
Post _update , 推荐使用
POST /kk/user/1/_update
{
"doc": {
"age": 18
}
}
{
"doc": {
"age": 18
}
}
条件查询
匹配
Get kk/user/_search
{
"query": {
"match": {
"name" : "kk"
}
}
}
{
"query": {
"match": {
"name" : "kk"
}
}
}
排序
Get kk/user/_search
{
"sort": [{
"age": { "order": "asc" }
}]
}
{
"sort": [{
"age": { "order": "asc" }
}]
}
分页
Get kk/user/_search
{
"from": 0,
"size": 1
}
{
"from": 0,
"size": 1
}
布尔值
must(and)
Get kk/user/_search
{
"query": {
"bool": {
"must": {
"name": "kk"
}
}
}
}
{
"query": {
"bool": {
"must": {
"name": "kk"
}
}
}
}
must_not(not)
Get kk/user/_search
{
"query": {
"bool": {
"must_not": {
"name": "kk"
}
}
}
}
{
"query": {
"bool": {
"must_not": {
"name": "kk"
}
}
}
}
should(or)
Get kk/user/_search
{
"query": {
"bool": {
"should": {
"name": "kk"
}
}
}
}
{
"query": {
"bool": {
"should": {
"name": "kk"
}
}
}
}
过滤器
Get kk/user/_search
{
"query": {
"filter": {
"range": {
"age": {
"gte": 3,
"lte": 25
}
}
}
}
}
{
"query": {
"filter": {
"range": {
"age": {
"gte": 3,
"lte": 25
}
}
}
}
}
分词查询
match
会使用分词器解析!(先分析文档,然后在通过分析的文档进行查询!)
keyword类型不会被分词器解析
term精确查询
代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词拆解
查看分词情况
GET test/_analyze
{
analyzer: "keyword"或者"standard"
"text" : "love China"
}
{
analyzer: "keyword"或者"standard"
"text" : "love China"
}
term和match的区别
https://www.jianshu.com/p/d5583dff4157
9.高亮查询
高亮显示的字段
"highlight": {
"fields" : {
"name" : { }
}
}
"fields" : {
"name" : { }
}
}
自定义html显示格式
"highlight": {
"pre_tags" : "<p style="color: red">",
"post_tags" : "</p>",
"fields" : {
"name" : { }
}
}
"pre_tags" : "<p style="color: red">",
"post_tags" : "</p>",
"fields" : {
"name" : { }
}
}
9、集成SpringBoot
导入依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
修改默认ElasticSearch版本为自己的船新版本
<properties>
<java.version>1.8</java.version>
<!--自定义ElasticSearch版本依赖-->
<elasticsearch.version>7.6.1</elasticsearch.version>
</properties>
<java.version>1.8</java.version>
<!--自定义ElasticSearch版本依赖-->
<elasticsearch.version>7.6.1</elasticsearch.version>
</properties>
创建项目,注入初始化组件
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
return client;
}
}
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
return client;
}
}
10、具体的Api测试
代码
创建索引
判断索引是否存在
删除索引
创建文档
crud文档
收藏
收藏
0 条评论
下一页