ElasticSearch 学习笔记(二)-----Elasticsearch的简介以及应用

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 接上一篇《ElasticSearch 学习笔记(一)-----Lucene的简介以及索引原理》,这一篇我们接着来学习ElasticSearch。我们将从分别介绍ElasticSearch的概念,工作原理,以及简单应用 。

概述

接上一篇《ElasticSearch 学习笔记(一)-----Lucene的简介以及索引原理》,这一篇我们接着来学习ElasticSearch。我们将从分别介绍ElasticSearch的概念,工作原理,以及简单应用 。

ElasticSearch 简介

ElasticSearch 是一个基于Apache Lucene™的开源搜索引擎。无论是开源开始专有领域,Lucene 可以被认为是迄今为止最先进,性能最好的,功能最全的搜索引擎库。


但是,Lucene 只是一个库,想要使用它,必须使用Java语言将其集成到应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。


ElasticSearch 也使用Java开发并使用Lucene 作为其核心来实现所有的索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene 的复杂性。从而让全文搜索变得简单。

基本概念

索引

含有相同属性的文档集合,如果有关系型数据库模型对比,索引(index)的地位与数据库实例(database)相当。索引存放和读取的基本单元是文档。

文档

文档是可以索引的基本单位。文档(Document)由一个或者多个域(Field)组成,每个域(Field)由一个域名(此域名非彼域名)或者多个值组成(有多个值的值称为多值域(multi-valued))。从客户端的角度来看,文档(Document)就是 一个JSON对象。

参数映射(Mapping)

在 1.1节 认识Apache Lucene 中已经提到,所有的文档(Document)在存储之前都必须经过分析(analyze)流程。用户可以配置输入文本分解成Token的方式;哪些Token应该被过滤掉;或者其它的的处理流程,比如去除HTML标签。此外,ElasticSearch提供的各种特性,比如排序的相关信息。保存上述的配置信息。

文档类型

每个文档在ElasticSearch中都必须设定它的类型。文档类型使得同一个索引中在存储结构不同文档时,只需要根据文档类型就可以找到对应的参数映射(Mapping)信息。方便文档的存取。

节点

单独一个ElasticSearch服务器实例称为一个节点。

集群

集群是多个ElasticSearch节点的集合。

分片索引

集群能够存储超出单机容量的信息,为了实现这种需求,ElasticSearch把数据分发到多个存储Lucene索引的物理机上。

ElasticSearch 安装

1.前提,首先要安装jdk,首先我们使用的是Oracle的JDK,通过java -version

2.下载安装包

将ElasticSearch 的安装包下载下来,然后解压。我们可以通过网页下载,然后上传的 CentOS服务器上,也可以通过wget 命令来下载,此处我将安装包放在/root/opt/ 下面

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz

3.解压安装包。

tar -zxvf elasticsearch-6.4.3.tar.gz  -C /root/opt

4.解压之后,转到elasticsearch-6.4.3 文件夹下
然后执行./bin/elasticsearch 启动elasticsearch,但是在root 用户下执行会报错

5.所以,我们需要创建一个普通用户

#新增一个用户
useradd estest
#授权
chown -R estest /opt/elasticsearch-*
#切换到这个用户
su estest

6. 此处我们还需要检查下 该用户是否有java 的访问权限,如果没有,则通过如下命令赋予权限。

su root 
[root@ elasticsearch-6.4.3]# sudo chmod -R 755  /root/
[root@ elasticsearch-6.4.3]# sudo chown -R estest  /root/
[root@ elasticsearch-6.4.3]# sudo chmod -R 755  /root/opt/java/
[root@ elasticsearch-6.4.3]# sudo chown -R estest  /root/opt/java/

7.权限赋完之后,我们可以通过java -version查看下

b95b99a0498790b707ebbd75db690764_20190223201431267.png

8.最后我们在 elasticsearch-6.4.3 文件夹下通过./bin/elasticsearch 启动elasticsearch

如图,没有报错的话,则启动成功。

f47596fe9765bf68165729b6650d70cb_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

9.再开一个命令窗口,我们访问curl 'http://localhost:9200'。如果出现如下结果,这表示elasticsearch启动成功。

4440e454aaba9539e2f86bfe262f433c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

启动elasticsearch 时可能会出现如下两个问题。


问题一、文件描述符太低

6336ae8763771ce10c6e1cf4e6fafc6c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

解决办法:

切换到root用户修改/etc/security/limits.conf。

su root
vim /etc/security/limits.conf

在文末加入:

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

退出当前用户,从新进入

问题二 、

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

max_map_count 的值是指一个进程最多可用于的内存映射区(memory map areas),在调用malloc会用到,由mmap/mprotect生成。

解决办法

切换到root 用户,修改/etc/sysctl.conf

su root
vim  /etc/sysctl.conf

加入

vm.max_map_count=655360

使其生效

sysctl -p

有时候启动elasticsearch时候会提示内存不足,然后启动不了,这时候可以改小jvm最小内存

cat config/jvm.options

问题三 、

有时候启动es时,会提示内存不足,导致启动失败。错误提示如下:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f4152000000, 33554432, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 33554432 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid29872.log

这时候我们可以修改 jvm.options 中的内存设置,通过命令vim config/jvm.options 打开文件,然后修改:

561548d92590e3137a41e458da9940da_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

如果需要外网访问的话,我们还需要在 config/elasticsearch.yml 加入如下配置:

vim config/elasticsearch.yml

network.host: 0.0.0.0
#允许跨域访问,方便后面可视化工具elasticsearch-head
http.cors.enabled: true
http.cors.allow-origin: "*"


特别说明:如果使用的是阿里云服务器,在需要在安全组中将端口放开

云服务器ECS----->网络和安全----->安全组---->配置规则。

bed348d7cba6253c72c3a0ab9d06d81e_2019022321123644.png

至此, 我们单机版的ElasticSearch 就安装完成。接下来我们配置一下ElasticSearch 集群。

首先在主节点上添加如下配置:

vim elasticsearch.yml

#添加一下配置
cluster.name: kobe
node.name: master 
node.master: true

然后重启服务

然后,配置从节点1

解压elasticsearch-6.4.3.tar.gz 到elasticsearch-slave1

tar -zxvf elasticsearch-6.4.3.tar.gz  -C /root/opt/elasticsearch-slave1

然后,在从节点1 的elasticsearch.yml中加入如下配置:

##允许跨域访问,方便后面可视化工具elasticsearch-head
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: kobe
node.name: slave1
http.port: 9800
network.host: 0.0.0.0
#设置主动发现主节点地址
discory.zen.ping.unicast.hosts:  ["172.16.148.129"]

其中,172.16.148.129 对应主节点的启动ip。 然后启动从节点,至此我们主从节点都配置完毕。

elasticsearch-head安装

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install  或者cnpm install(需要安装淘宝镜像)
npm run start

启动成功之后访问http://localhost:9100

b4e7e7d8b2f2310ab9c04c0e29f12c0c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

总结

本文,我们详细介绍了ElasticSearch的安装,以及一些注意事项。然后说到了主从节点的配置。


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
4月前
|
运维 监控 Java
探索Elasticsearch在Java环境下的全文检索应用实践
【6月更文挑战第30天】在大数据背景下,Elasticsearch作为分布式搜索分析引擎,因其扩展性和易用性备受青睐。本文指导在Java环境中集成Elasticsearch,涉及安装配置、使用RestHighLevelClient连接、索引与文档操作,如创建索引、插入文档及全文检索查询。此外,还讨论了高级查询、性能优化和故障排查,帮助开发者高效处理非结构化数据全文检索。
146 0
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
|
1月前
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
176 4
|
6天前
|
人工智能
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
132 2
|
5月前
|
SQL JSON API
ELK技术栈 - Elasticsearch 学习笔记(三)
ELK技术栈 - Elasticsearch 学习笔记(三)
86 0
|
5月前
|
缓存 关系型数据库 Java
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
43 0
|
2月前
|
存储 自然语言处理 API
Elasticsearch 在语音识别领域的应用
【8月更文第28天】随着语音助手和智能设备的普及,语音识别技术已经成为人们日常生活中不可或缺的一部分。Elasticsearch 作为一种高性能的搜索和分析引擎,在语音识别领域可以发挥重要作用,尤其是在提供快速准确的语音搜索结果方面。本文将介绍如何利用 Elasticsearch 来增强语音识别系统的搜索能力,并通过示例代码展示具体实现。
57 0
|
2月前
|
机器学习/深度学习 自然语言处理 搜索推荐
构建智能搜索应用:Elasticsearch与自然语言处理的融合
【8月更文第28天】随着大数据和人工智能技术的发展,用户对搜索应用的需求已经从简单的关键词匹配转向了更加智能化、人性化的交互方式。本文将探讨如何利用Elasticsearch和自然语言处理(NLP)技术构建一个能够理解用户意图并提供精准搜索结果的智能搜索系统。
162 0
|
4月前
|
存储 监控 搜索推荐
大规模数据存储与检索:Java与Elasticsearch应用
大规模数据存储与检索:Java与Elasticsearch应用
|
3月前
|
存储 监控 搜索推荐
大规模数据存储与检索:Java与Elasticsearch应用
大规模数据存储与检索:Java与Elasticsearch应用