搜索引擎ElasticSearch之(1)、架构简介及基本服务搭建

1、ElasticSearch基本术语及概念

1.1、索引词(term)

ElasticSearch中的索引词是为一个能被索引的精确值,索引词可以为文档的某个字段或某个字段经过分词器分词后的token单元。索引词可以通过term查询进行精确搜索。

1.2、文本(text)

文本为普通的非结构化文字,可被分词器分解为索引词,并通过索引词构建倒排索引。而搜索时,搜索词也会被分解为索引词,并通过倒排索引精确匹配,最终获取相关的文档。

1.3、分析(analysis)

分析即将文本转换为索引词的过程,不同的分词器会有不同的分析过程。分析过程如大小写转换、去掉标点符号、去除停顿词等。

1.4、集群(cluster)

ElasticSearch的集群由分布式的多个节点组成,每个节点有相同的集群名。集群的各个节点通过组播或单播的方式来发现彼此并加入集群。

1.5、节点(node)

节点时物理上独立的服务,一个节点就是一个ElasticSearch进程,节点会存储数据,参与集群索引、搜索等,每个节点都会保存集群完整的状态及配置信息,集群中每个节点必须有唯一名称。若不定义节点名称,则会在启动的时候自动分配一个。

1.6、分片(shard)

一个分片即为一个lucene进程实例,索引时一个或多个分片的逻辑集合。一个索引在创建时,可以指定主分片及分片副本数量,而一旦创建完毕后,主分片数是不可再改变,但分片副本数量是可以改变的。ElasticSearch会自动将分片在不同阶段间进行均衡,以达到集群的负载均衡及高可用。

1.7、主分片(primary shard)

一个索引的文档只会存储在一个主分片及其副本中。

1.8、副本分片(replica shard)

每个主分片可以有0或多个副本分片,副本分片保存了主分配的数据副本。副本分片有以下作用:a、增强高可用性:当某个主分片失败的时候,其对应的某个副本分片会自动被选举为主分片,以保障系统的可用性及稳定性;b、提高性能:当进行搜索的时候,可以在主分片或副本分片中进行搜索,当主分片有多个副本的时候,可以提升搜索的并发性能。

1.9、路由(routing)

当存储或获取某个文档的时候,其会通过路由找到唯一的主分片,路由的算法为某个字段的散列值对主分片数量进行取模。默认字段为文档id,其可以由ElasticSearch自动生成或用户指定。

1.10、复制(replica)

当集群的某个节点出现故障时,复制可以对故障进行转移,以保证系统的高可用。复制主要在主分片和副本分片中发生。

1.11、索引(index)

索引是具有相同结构的文档集合。索引是一个逻辑概念,一个索引可以包含多个类型,而在物理上,一个索引包含一个或多个分片,索引数据分布在分片中,而分片存储在多个节点中。

1.12、类型(type)

一个索引中可以定义多个类型,类型是索引的逻辑分区。

1.13、文档(document)

文档时存储在ElasticSearch中的一个JSON格式字符串,如关系数据中的一行数据。每个文档都有一个唯一id。在ElasticSearch集群中,索引+类型+文档id共同确定一个唯一的文档。

1.14、映射(mapping)

映射如同关系数据库中的表结构,其定义了索引中类型、文档的结构、每个字段类型、分片配置等。映射可以在创建索引的时候定义,或是在第一次存储文档时由ElasticSearch自动识别。

1.15、字段(field)

一个文档包含0或多个字段,字段类型可以为简单的如数字、日期等类型,也可是数组或嵌套的对象类型。

1.16、字段来源(source field)

ElasticSearch存储文档时,会对某些字段做分析并构建倒排索引,而来源字段则保持文档字段的原始数据,当用户搜索时刻返回这些原始数据,来源字段可以只索引而不存储。

1.17、主键(ID)

主键是文档的唯一标识,存储时若未指定id,则ElasticSearch会自动生成一个id,index+type+id会唯一确定一个文档。

2、ElasticSearch环境搭建

2.1、ElasticSearch下载

可以在ElasticSearch官网:https://www.elastic.co/cn/downloads/,或华为的镜像服务器下载:https://mirrors.huaweicloud.com/

2.2、文件说明

下载解压文件,目录如下:


目录.png

其中bin文件下为ElasticSearch的可执行文件,config为配置文件,data为默认数据存储目录,logs为默认日志存储目录。

2.3、安装

可以无需更改配置文件,直接使用config中的默认文件启动。默认http端口为9200。

$ ./elasticsearch.bat

启动日志如下:

future versions of Elasticsearch will require Java 11; your Java version from [C:\Program Files\Java\jdk1.8.0_211\jre] does not meet this requirement
Warning: with JDK 8 on Windows, Elasticsearch may be unable to derive correct
  ergonomic settings due to a JDK issue (JDK-8074459). Please use a newer
  version of Java.
Warning: MaxDirectMemorySize may have been miscalculated due to JDK-8074459.
  Please use a newer version of Java or set MaxDirectMemorySize explicitly.
[2020-03-21T21:58:07,990][INFO ][o.e.e.NodeEnvironment    ] [test-node-1] using [1] data paths, mounts [[NewDisk (D:)]], net usable_space [63.6gb], net total_space [137.9gb], types [NTFS]
[2020-03-21T21:58:07,995][INFO ][o.e.e.NodeEnvironment    ] [test-node-1] heap size [990.7mb], compressed ordinary object pointers [true]
[2020-03-21T21:58:08,752][INFO ][o.e.n.Node               ] [test-node-1] node name [test-node-1], node ID [_tCUuwGSQ1CiF1vxKS42nA], cluster name [test-cluster]
[2020-03-21T21:58:08,754][INFO ][o.e.n.Node               ] [test-node-1] version[7.6.0], pid[21580], build[default/zip/7f634e9f44834fbc12724506cc1da681b0c3b1e3/2020-02-06T00:09:00.449973Z], OS[Windows 10/10.0/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_211/25.211-b12]
[2020-03-21T21:58:08,754][INFO ][o.e.n.Node               ] [test-node-1] JVM home [C:\Program Files\Java\jdk1.8.0_211\jre]
[2020-03-21T21:58:08,755][INFO ][o.e.n.Node               ] [test-node-1] JVM arguments [-Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dio.netty.allocator.numDirectArenas=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.locale.providers=COMPAT, -Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Djava.io.tmpdir=C:\Users\zhaozhou\AppData\Local\Temp\elasticsearch, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=data, -XX:ErrorFile=logs/hs_err_pid%p.log, -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -XX:+PrintTenuringDistribution, -XX:+PrintGCApplicationStoppedTime, -Xloggc:logs/gc.log, -XX:+UseGCLogFileRotation, -XX:NumberOfGCLogFiles=32, -XX:GCLogFileSize=64m, -XX:MaxDirectMemorySize=536870912, -Delasticsearch, -Des.path.home=D:\soft\elasticsearch-7.6.0-windows-x86_64\elasticsearch-7.6.0, -Des.path.conf=D:\soft\elasticsearch-7.6.0-windows-x86_64\elasticsearch-7.6.0\config, -Des.distribution.flavor=default, -Des.distribution.type=zip, -Des.bundled_jdk=true]
[2020-03-21T21:58:16,134][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [aggs-matrix-stats]
[2020-03-21T21:58:16,136][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [analysis-common]
[2020-03-21T21:58:16,137][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [flattened]
[2020-03-21T21:58:16,137][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [frozen-indices]
[2020-03-21T21:58:16,137][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [ingest-common]
[2020-03-21T21:58:16,137][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [ingest-geoip]
[2020-03-21T21:58:16,138][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [ingest-user-agent]
[2020-03-21T21:58:16,138][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [lang-expression]
[2020-03-21T21:58:16,138][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [lang-mustache]
[2020-03-21T21:58:16,138][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [lang-painless]
[2020-03-21T21:58:16,138][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [mapper-extras]
[2020-03-21T21:58:16,138][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [parent-join]
[2020-03-21T21:58:16,139][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [percolator]
[2020-03-21T21:58:16,139][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [rank-eval]
[2020-03-21T21:58:16,139][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [reindex]
[2020-03-21T21:58:16,139][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [repository-url]
[2020-03-21T21:58:16,139][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [search-business-rules]
[2020-03-21T21:58:16,140][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [spatial]
[2020-03-21T21:58:16,140][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [transform]
[2020-03-21T21:58:16,140][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [transport-netty4]
[2020-03-21T21:58:16,140][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [vectors]
[2020-03-21T21:58:16,140][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-analytics]
[2020-03-21T21:58:16,141][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-ccr]
[2020-03-21T21:58:16,141][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-core]
[2020-03-21T21:58:16,141][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-deprecation]
[2020-03-21T21:58:16,141][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-enrich]
[2020-03-21T21:58:16,141][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-graph]
[2020-03-21T21:58:16,142][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-ilm]
[2020-03-21T21:58:16,142][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-logstash]
[2020-03-21T21:58:16,142][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-ml]
[2020-03-21T21:58:16,142][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-monitoring]
[2020-03-21T21:58:16,142][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-rollup]
[2020-03-21T21:58:16,142][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-security]
[2020-03-21T21:58:16,143][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-sql]
[2020-03-21T21:58:16,143][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-voting-only-node]
[2020-03-21T21:58:16,143][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded module [x-pack-watcher]
[2020-03-21T21:58:16,144][INFO ][o.e.p.PluginsService     ] [test-node-1] loaded plugin [analysis-ik]
[2020-03-21T21:58:24,489][INFO ][o.e.x.s.a.s.FileRolesStore] [test-node-1] parsed [0] roles from file [D:\soft\elasticsearch-7.6.0-windows-x86_64\elasticsearch-7.6.0\config\roles.yml]
[2020-03-21T21:58:26,058][INFO ][o.e.x.m.p.l.CppLogMessageHandler] [test-node-1] [controller/17176] [Main.cc@110] controller (64 bit): Version 7.6.0 (Build 1c8cca13fa9631) Copyright (c) 2020 Elasticsearch BV

浏览器访问:http://127.0.0.1:9200/会有如下输出。

输出.png

2.4、Elasticsearch-Head插件安装

可以在chrome中安装Elasticsearch-Head插件,直接在chrome应用商店搜索或在https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm/related中下载。

安装完成后可查看Elasticsearch的机器状态信息:

head.png

你可能感兴趣的:(搜索引擎ElasticSearch之(1)、架构简介及基本服务搭建)