es2个索引如何做关联查询 es实现多个索引关联查询_elasticsearch

elastic



什么是Elasticsearch?

Elasticsearch(简称:ES)是一个基于Apache Lucene(TM)的开源搜索引擎,使用Java编写并使用Lucene来建立索引并实现搜索的功能,其目的是通过简单连贯的RESTful API使得全文检索变得简单并隐藏Lucene的复杂性。ES不仅仅是Lucene和全文检索,它还提供:

  • 分布式的实时文件存储,每个字段都被索引并且可被搜索;
  • 实时分析的分布式搜索引擎;
  • 可以扩展到上百台服务器,处理PB级别结构化或非结构化数据。

Elasticsearch基本概念

  • 近实时(NRT):ES是一个接近实时的搜索引擎,这意味着:从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒);
  • 集群(Cluster):ES允许多台服务器协同工作,每台服务器可以运行多个ES实例,单个ES实例称为一个节点(Node),一组节点构成一个集群(Cluster);
  • 索引(index):索引就是拥有相似特征的文档的集合;ES会索引所有字段,经过处理后写入一个反向索引(倒排索引 Inverted Index),查询数据时,直接查询该索引。所以ES数据管理的顶层单位是索引(index),类比于关系数据库中的数据库(database)概念;【注】:每个索引有一个或者多个分片(shard),每个分片有多个副本(replica);
  • 文档(document):ES中最小数据单元,index中单条记录称为文档。一个文档可以是一条用户数据、一条商品分类数据等等,通常用JSON数据结构表示;
  • 类型(type):文档(document)可以分组,比如weather这个index中可以按照城市分组(北京和上海),也可以按照气候分组(晴天和雨天),这种分组称为类型(type),是虚拟的逻辑分组,用来过滤document;【注】:ES 6.x版本只允许每个index包含一个type,ES 7.x版本彻底移除了type;

补充:① 分片(shard):单台机器无法存储大量数据,ES可以将一个索引中的数据切分为多个分片,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多的数据,让搜索和分析等操作分布到多台服务器上执行,提升吞吐量和性能。每个shard都是一个Lucene index;② 副本(replica):任何一个服务器随时可能出现故障或宕机,此时shard可能会丢失,因此可以通过为每个shard创建多个replica副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。

Elasticsearch安装

工欲善其事,必先利其器!在学习Elasticsearch之前,首先给大家介绍一下如何安装Elasticsearch!

首先,在官网https://www.elastic.co/下载Elasticsearch:




es2个索引如何做关联查询 es实现多个索引关联查询_服务器_02

Elastic官网截图



点击右侧下载按钮,即可前往下载页面,选择Elasticsearch产品:




es2个索引如何做关联查询 es实现多个索引关联查询_服务器_03

Elasticsearch下载页面



由于Elasticsearch是基于Java运行时平台,所以需要安装JDK环境。关于Java环境的安装,这里不做详细说明,大家可以自行前往google或者度娘安利☺!

下载得到的压缩包,我们解压后得到如下内部结构:




es2个索引如何做关联查询 es实现多个索引关联查询_Elastic_04

Elasticsearch解压内部结构



我们来依次看一下这些文件分别代表什么意思:

bin目录下面存放的是一系列可执行程序,同名.bat后缀用于window平台可执行脚本:

  • elasticsearch:Elasticsearch的启动进程,Elasticsearch程序的入口;
  • elasticsearch-env:用于环境变量的配置,可以在这里修改相关的环境配置;
  • elasticsearch-translog:主要用于对Translog日志进行清理操作;
  • elasticsearch-keystore:主要用于管理Elasticsearch的密钥;
  • elasticsearch-plugin:插件安装工具;
  • elasticsearch-service*:开头的几个程序是为window平台提供服务管理工具;

config目录主要存放以下配置文件信息:

  • elasticsearch.yml:Elasticsearch的配置文件,使用Yaml文件格式为标准;
  • jvm.options:Java虚拟机运行时环境的相关参数配置;
  • log4j2.properties:日志文件相关的配置;

lib 目录是 Elasticsearch 依赖的 Jar 包和自己的 Java 本身程序所在的地方。

data 目录,数据默认存放的位置。

logs 目录,日志默认存放的位置。

modules 目录,存放 Elasticsearch 的内部功能模块。

plugins 目录,存放 Elasticsearch 的外部扩展插件。

然后,我们开始运行 Elasticsearch 程序。进入终端控制台,CD 切换到解压文件所在目录,注意目录名不要包含中文和空格。运行 Elasticsearch 主程序,如下图所示:




es2个索引如何做关联查询 es实现多个索引关联查询_Elastic_05


看到控制台输出了若干启动信息,可以看到有启动程序的环境变量,加载的模块和插件名称清单,当前监听了9200和9300端口,并且不再有新的日志输出,这个时候说明Elasticsearch已经启动完毕了,我们可以进一步验证Elasticsearch服务器是否正常。9200端口是Elasticsearch默认监听的RESTful端口,属于HTTP协议。到这里,我们一个最简单的Elasticsearch节点或者叫单实例集群就已经成功安装成功并启动了。

Elasticsearch操作实例

curl -XPORT -H 'Content-Type: application/json'   http://localhost:9200/index/doc/1?pretty -d'{"name":"medcl"}'

分析该URL请求:

  1. http://localhost:9200/是Elasticsearch的访问地址,http协议、本机地址、9200端口
  2. /index/doc/1:可以理解为文档的路径,相当于是这个索引文档的唯一标识,由以下几部分组成:
  • index: 索引名称,是这个文档存放的索引数据库名称;
  • doc: 类型名称,是一个固定的类型,7.0 版本后移除了该概念;
  • 1: 文档ID,是这个文档在这个Elasticsearch数据库中的唯一标识,可以理解为数据库中的主键
  1. {"name":"medcl"}: 是http请求的body参数,是一个标准的JSON文档,里面的字段名是name,字段值是medcl;
  2. ?pretty: 表示对请求的返回结果进行输出格式化,主要是为了让请求返回的JSON数据格式化。