当前位置: 首页>后端>正文

ELK搜索引擎可以干嘛 es搜索引擎优点

本篇主要介绍对es的初次体检,以及安装和初步使用。

一.es简介

Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。

特点:

1.Elasticsearch允许您以任何方式执行和组合多种类型的搜索 - 结构化,非结构化,地理位置,度量标准。

2.Elasticsearch聚合,您可以缩小以探索数据中的趋势和模式。

3.您可以以极其惊人的速度利用和访问所有数据。

4.Elasticsearch在分布式环境中运行,从头开始设计,以实现永久的安心。

5.数字,文本,地理位置,结构化,非结构化。 欢迎所有数据类型。

6.我们使Elasticsearch易于在任何规模下运行,而不会影响功耗和性能。

7.Elasticsearch使用标准的RESTful API和JSON。

8.我们还使用Java,Python,.NET,SQL和PHP等多种语言构建和维护客户端。

9.Elasticsearch是一个近乎实时的搜索平台。 这意味着从索引文档到可搜索文档的时间有一点延迟(通常是一秒)。

10.如果您的网络上当前没有其他Elasticsearch节点正在运行,则默认情况下,启动单个节点将形成名为elasticsearch的新单节点集群。

二、es安装(windows)(6.3.2)

elasticsearch至少需要Java 8,建议您使用Oracle JDK版本1.8.0_131。

默认情况下,Elasticsearch使用端口9200来提供对其REST API的访问。 如有必要,可以配置此端口。

对于 Windows 用户, 我们建议使用MSI 安装程序包。该包包含一个图形用户界面 (GUI), 用于指导您完成安装过程。

首先, 从 artifacts.elastic.co/downloads/e… 下载 Elasticsearch 6.3.2 MSI。 然后双击下载的文件以启动 GUI。在第一个屏幕中, 选择部署目录:

然后选择是作为服务安装还是根据需要手动启动 Elasticsearch。要与 tar 示例对齐, 请选择 "不安装为" 服务:

对于配置, 只需保留默认值:

再次, 要与 tar 示例对齐, 请取消选中所有插件以不安装任何插件:

单击 "安装" 按钮后, 将安装 Elasticsearch:

默认情况下, 将在中安装 Elasticsearch。在此处导航并进入 bin 目录, 如下所示:%PROGRAMFILES%\Elastic\Elasticsearch

使用命令提示符:

cd %PROGRAMFILES%\Elastic\Elasticsearch\bin
复制代码

现在, 我们已经准备好开始我们的节点和单个群集:

.\elasticsearch.exe
复制代码

如果安装过程中的一切都很顺利, 您应该会看到如下所示的一大堆消息:

[2016-09-16T14:17:51,251][INFO ][o.e.n.Node               ] [] initializing ...
[2016-09-16T14:17:51,329][INFO ][o.e.e.NodeEnvironment    ] [6-bjhwl] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [317.7gb], net total_space [453.6gb], spins? [no], types [ext4]
[2016-09-16T14:17:51,330][INFO ][o.e.e.NodeEnvironment    ] [6-bjhwl] heap size [1.9gb], compressed ordinary object pointers [true]
[2016-09-16T14:17:51,333][INFO ][o.e.n.Node               ] [6-bjhwl] node name [6-bjhwl] derived from node ID; set [node.name] to override
[2016-09-16T14:17:51,334][INFO ][o.e.n.Node               ] [6-bjhwl] version[6.3.2], pid[21261], build[f5daa16/2016-09-16T09:12:24.346Z], OS[Linux/4.4.0-36-generic/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_60/25.60-b23]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [aggs-matrix-stats]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [ingest-common]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [lang-expression]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [lang-mustache]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [lang-painless]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [percolator]
[2016-09-16T14:17:51,968][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [reindex]
[2016-09-16T14:17:51,968][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [transport-netty3]
[2016-09-16T14:17:51,968][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [transport-netty4]
[2016-09-16T14:17:51,968][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded plugin [mapper-murmur3]
[2016-09-16T14:17:53,521][INFO ][o.e.n.Node               ] [6-bjhwl] initialized
[2016-09-16T14:17:53,521][INFO ][o.e.n.Node               ] [6-bjhwl] starting ...
[2016-09-16T14:17:53,671][INFO ][o.e.t.TransportService   ] [6-bjhwl] publish_address {192.168.8.112:9300}, bound_addresses {{192.168.8.112:9300}
[2016-09-16T14:17:53,676][WARN ][o.e.b.BootstrapCheck     ] [6-bjhwl] max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
[2016-09-16T14:17:56,731][INFO ][o.e.h.HttpServer         ] [6-bjhwl] publish_address {192.168.8.112:9200}, bound_addresses {[::1]:9200}, {192.168.8.112:9200}
[2016-09-16T14:17:56,732][INFO ][o.e.g.GatewayService     ] [6-bjhwl] recovered [0] indices into cluster_state
[2016-09-16T14:17:56,748][INFO ][o.e.n.Node               ] [6-bjhwl] started
复制代码

如果不深入详细说明, 我们可以看到, 我们的节点名为 "6 bjhwl" (在您的案例中将是不同的字符集) 已经开始, 我们已经在一个集群中启动了一个节点。

此时,访问localhost:9200看到有内容,即安装成功。

三、安装中文分词器

smartcn中文分词器下载地址: artifacts.elastic.co/downloads/e….

下载后解压到es的plugins目录下即可。

四、安装kibana(es可视化工具)

1.下载kibana 6.3.2 :www.elastic.co/cn/download…

2.在编辑器中打开配置/kibana yml。 设置为指向您的 Elasticsearch 实例elasticsearch.url

3.运行 (或在 Windows 上)bin/kibanabin\kibana.bat

4.访问http://localhost:5601

五、新增数据

es支持http json形式直接操作数据,因此先使用下通过http请求进行新增数据。

例如:新建一个index名称为zhongwen,index 里面包含一个名为person的type,person中包含三个属性,user,title,desc。

index可以理解为数据库中的一个库,type 可以理解为库中的一个数据表,属性对应数据库中的字段。
复制代码

创建index,并配置mapping文件。 mapping文件是对index中每个字段的索引类型,解析类型,使用的分词器等进行设置的一个配置文件,之后的文章将会详细讲述如何根据不同需求配置不同的mapping。

mapping文件es会自动生成,如果觉得想自定义的话,可以自己创建。
复制代码

使用httpclient进行创建index,并制定字段使用smartcn中文分词器:

存入数据:

存入数据需指定要存入的index,type以及要存入的id为多少。

至此,数据已经存入es中,若想查看数据,可以使用http请求的方式,或者使用kibana直接查看。

若在kibana中查看,点击kibana的左侧菜单discover,输入创建的type名称,例如:person,选择下一步,即可看到数据。

六、查询数据

es提供多种查询方式,根据不同的需要,我们通过不同的查询方式进行查询。

在添加数据中,我们添加了一条带有中文的数据,我们能否像在数据库中like一样进行模糊查询呢?答案是肯定的。

此次,我们使用match匹配去命中刚才的插入的数据,如下:

可以看到,我们的中文也能像在数据库中进行模糊查询一样进行搜索。

当然,es的强大的搜索功能,包含多种搜索,在之后的文章中将会细细讲述。

七、集群搭建

我们系统中的数据在单机es情况下完全适用,调查集群搭建是为了考虑es在横向扩容上是否方便。答案是肯定的,es是为分布式而生,因此在集群搭建方面非常便利。

1.在每台机器上安装es

2.集群配置

集群配置中最重要的两项是node.name与network.host,每个节点都必须不同。其中node.name是节点名称,主要是在Elasticsearch自己的日志加以区分每一个节点信息。 discovery.zen.ping.unicast.hosts是集群中的节点信息,可以使用IP地址、可以使用主机名(必须可以解析)。

vim /etc/elasticsearch
cluster.name: aubin-cluster                                 # 集群名称
node.name: els1                                             # 节点名称,仅仅是描述名称,用于在日志中区分

path.data: /var/lib/elasticsearch                           # 数据的默认存放路径
path.logs: /var/log/elasticsearch                           # 日志的默认存放路径

network.host: 192.168.0.1                                   # 当前节点的IP地址
http.port: 9200                                             # 对外提供服务的端口,9300为集群服务的端口

discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"]       
# 集群个节点IP地址,也可以使用els、els.shuaiguoxia.com等名称,需要各节点能够解析

discovery.zen.minimum_master_nodes: 2                       # 为了避免脑裂,集群节点数最少为 半数+1
复制代码

3.启动

4.查看集群状态

GET /_cat/health?v
复制代码

至此,集群搭建完毕,由于es天生为分布式的,因此搭建起来非常方便。

八、java调用es

es同样提供了多种语言的客户端,操作java我们使用目前最新的java high level rest client。

java 高级 rest 客户端在 java 低级别 rest 客户端上工作。其主要目标是公开 API 特定的方法, 即接受请求对象作为参数并返回响应对象, 以便请求编组和响应不编组由客户端本身处理。 可以同步或异步调用每个 API。同步方法返回响应对象, 而异步方法 (其名称以后缀结尾) 要求在接收到响应或错误后 (在低级客户端管理的线程池上) 通知侦听器参数。 Java 高级别 REST 客户端依赖于 Elasticsearch 核心项目。它接受与之相同的请求参数, 并返回相同的响应对象。

java 高级别 REST 客户端需要 java 1.8, 并依赖于 Elasticsearch 核心项目。客户端版本与为客户端开发的 Elasticsearch 版本相同。

maven依赖:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.3.2</version>
</dependency>
复制代码

创建客户端:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));
复制代码

关闭客户端:

client.close();
复制代码

其他具体的各项api在之后的文章中将会详细讲述。本文将不过多阐述。

api可参考:java-high-level-rest-client官方文档

总结

es安装简单,集群搭建方便。在插入数据时可不配置mapping文件,使用es自动配置,初次使用更加方便。但不包含可视化页面,需另外安装kibana或者head(集群节点可视化工具)进行可视化。提供多种查询方式,文档清晰。对多种语言进行支持,并提供客户端api进行快速使用。

总体来说,es同样值得推荐。


https://www.xamrdz.com/backend/33c1928804.html

相关文章: