ES应用场景及核心概念一

Posted 踩踩踩从踩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES应用场景及核心概念一相关的知识,希望对你有一定的参考价值。

目录

ES基本安装及应用

安装

​ 使用方式

 这里在java中实现,首先引入客户端包

index alias的应用

同步DB数据到ES

ES核心概念

type类型弱化。

 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的应用

在Elasticsearch中给index起一个alias(别名),能够非常优雅的解决两个索引
无缝切换的问题。

db同步数据到es中,当同步完成之前,指向老的数据中。通过完成,在指向新的数据。保证同步过程是安全的。

 

 在请求时,只需要 对别名进行操作就行。

执行场景,返回的数据,

 

 使用alias可以切换索引,同时查询多个索引当中数据,以及当作视图处理。

同步DB数据到ES

市面上讨论的,将数据从DB同步到ES有logstash-input-jdbc、go-mysql-
elasticsearch、elasticsearch-jdbc,我们选用Logstash-input-jdbc来实现数据迁移。

 

需要基于时间去迁移数据,做数据进行迁移。

ES核心概念

在ES最初的设计中,index被当做类似DB的级别,能够对数据进行物理隔离,type相当于
数据库中的表,对数据进行逻辑划分,document是ES中的一条数据记录。
但这样的设计在ES 5.6以后开始有了变化,新版本的ES会逐步弱化type的概念,直到将
其移除。

这个概念在es中有个问题,关系型数据库中 有两个表 如果有相同的字段,是完全隔离开的。通过表名是可以隔开,不会有任何关系,  如果  type 中 有两个相同  user_name字段。

 

对于luence来说 它就是一个相同的字段。因此这两个字段类型一定要相同。
相同得字段非常多,压缩率降低,排列非常稀疏。

type类型弱化。

ES最先的设计是用索引类比关系型数据库的数据库,用mapping type 来类比表,
一个索引中可以包含多个映射类别。这个类比存在一个严重的问题

这个是不断的优化的过程,平滑的过度。

 废除过后,升级 需要对数据进行转储,升级导致得问题。

升级过后,数据解决方案
reindex  将转换为三个index ,重新索引;  指定目标和源数据, dest  和source
还可以把type放到一个index中, 需要将id进行修改。重复得id.进行重新添加id.

 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应用场景及核心概念一的主要内容,如果未能解决你的问题,请参考以下文章

ES查询语法解析

新一代图片编解码技术在淘宝的应用及落地

ElasticSearch概念介绍及环境搭建

pbootcms对接微信扫码登录代码核心片段和步骤(前后端)

腾讯云新一代企业级HTAP数据库TBase核心概念

动态SQL基础概念复习(Javaweb作业5)