ES应用场景及核心概念一
Posted 踩踩踩从踩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES应用场景及核心概念一相关的知识,希望对你有一定的参考价值。
目录
ES基本安装及应用
通过lucene 进行发展而来,往上走,compass 最后开源 成为 es框架。
在大数据的情况,ES提供了分片 降低查询效率,提高存储的能力。
ES的使用场景: 给网站/APP添加搜索功能,存储、分析数据,管理、交互、分析空间信息,将ES用于GIS。
安装
- 添加es用户
useradd es
passwd es
- vi /etc/sysctl.conf
在文件最后面添加内容:
vm.max_map_count=262144
sysctl -p
一个jvm进程开启最多多少个线程。
-
vi /etc/security/limits.conf
配置一个java进程最多开启多少个文件
添加如下内容:
* hard nofile 65536
* soft nofile 65536
* soft nproc 2048
* hard nproc 4096
- vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 4096
- 安装JDK
tar -zxvf jdk1.8.0_11.tar.tgz
vi ~/.bash_profile
PATH=$PATH:$HOME/bin
export JAVA_HOME=/home/es/jdk1.8.0_11
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
export PATH
source ~/.bash_profile
- 上传安装包
elasticsearch-6.5.3.tar.gz
jdk1.8.0_11.tar.tgz
es安装包下载地址
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.tar.gz
对于es来说需要修改配置的 elasticsearch.yml 的集群配置名称
并且配置 操作系统不支持的拦截器 进行 配置好
后台启动 直接 elasticsearch -d
使用方式
es本身是基于resutful风格的访问格式,因此在 安装完成过后 请求 就使用 put get delete post 的请求 在 kibana中 使用查询 ,直接使用put 里面 包含 properties
在使用时,有用户order等。
其中也包含了mapping的概念,映射;这样来说 在mybatis 还是spring 等等框架中,mapping都时映射的概念。
在使用时,直接 通过 post 命令就可以 把 对应的名称和 字段,存在es中
在搜索方式,按照不同的
这里在java中实现,首先引入客户端包
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.4.0</version>
</dependency>
在使用时,需要指定配置类。 并指定好连接信息。
嗅探:客户端只需要指定一个ES服务端节点连接信息,连接上之后,如果开启了嗅探机制,
就会自动拉取服务端各节点的信息到客户端,从而避免我们需要配置一长串服务端连接信息
//配置信息
Settings settings = Settings.builder()
.put("cluster.name", "es-study") //指定集群名称
.put("client.transport.sniff", true) //自动嗅探
.build();
构建client 指定ip、port
//构建client
TransportClient client = new PreBuiltTransportClient(settings);
//指定ip、port
client.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.90.131"), 9300)); //9300为TCP通信端口
构建request , 构建搜索 search放入到request中 执行搜索
//构建request
SearchRequest request = new SearchRequest();
request.indices("music");
request.types("songs");
//构建搜索
SearchSourceBuilder search = new SearchSourceBuilder();
search.query(QueryBuilders.matchQuery("songName", "take me to your heart"));
search.timeout(new TimeValue(60, TimeUnit.SECONDS));
//search放入到request中
request.source(search);
//执行搜索
SearchResponse response = client.search(request).get();
//获取命中的文档
SearchHits hits = response.getHits();
SearchHit[] hitArr = hits.getHits();
System.out.println("搜索到" + hits.totalHits + "个文档");
//处理命中的文档
for (SearchHit hit : hitArr){
//打印元信息
System.out.println(hit.getType() + "," + hit.getScore());
//打印原文档
String sourceAsStrig = hit.getSourceAsString();
System.out.println(sourceAsStrig);
}
这都是基本请求方式,利用api,包括
index alias的应用
db同步数据到es中,当同步完成之前,指向老的数据中。通过完成,在指向新的数据。保证同步过程是安全的。
在请求时,只需要 对别名进行操作就行。
执行场景,返回的数据,
使用alias可以切换索引,同时查询多个索引当中数据,以及当作视图处理。
同步DB数据到ES
ES核心概念
这个概念在es中有个问题,关系型数据库中 有两个表 如果有相同的字段,是完全隔离开的。通过表名是可以隔开,不会有任何关系, 如果 type 中 有两个相同 user_name字段。
type类型弱化。
这个是不断的优化的过程,平滑的过度。
废除过后,升级 需要对数据进行转储,升级导致得问题。
ES核心操作
- index操作:创建/删除index、开启/关闭index、添加/查看mapping、设置/查看settings
通过获取时,就可以拿到对应得详细信息
包括分片和副本的东西,也有这个概念。
在创建index时,设置副本 及分片的数量
包括获取时,可以看到读写的权限 的查看
对于配置来说 又 static 和dynamic 的 静态和 动态。 可以在数据跑的时候,就可以修改来区分的,例如设置 index .shard
关闭 index
打开index
对外提供服务的方式
读写权限
默认是都可以的。
执行下面的操作就可以禁止读取
禁止写入
索引模板
PUT /_template/music2
{
"template" : "music*",
"order" :3,
"settings" : {
"number_of_shards" : 3
},
"mappings":{
"_default_" : {
"properties" : {
"songName" : { "type" : "text"}
}
}
}
}
- document操作:索引/查询/更新/删除document、搜索document,执行script
索引文档
需要显示指定索引文档id。
使用post方法 就可以自动生成索引文档的id
明确查询文档
GET /music_v4/songs/5
删除文档
DELETE /music_v4/songs/5
索引文档
- mapping操作:创建mapping、查询mapping、修改mapping
以上是关于ES应用场景及核心概念一的主要内容,如果未能解决你的问题,请参考以下文章