热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:从零搭建ES搜索服务基本概念及环境搭建

本文由编程笔记#小编为大家整理,主要介绍了从零搭建ES搜索服务基本概念及环境搭建相关的知识,希望对你有一定的参考价值。前言本系列文章最
本文由编程笔记#小编为大家整理,主要介绍了从零搭建ES搜索服务基本概念及环境搭建相关的知识,希望对你有一定的参考价值。



前言

本系列文章最终目标是为了快速搭建一个简易可用的搜索服务。方案并不一定是最优,但实现难度较低。




背景

近期公司在重构老系统,需求是要求知识库支持全文检索。
我们知道普通的数据库like方式效果及性能都不好,所以另寻出路,确定通过 Elasticsearch (下文简称「 ES 」)搜索引擎实现。




技术选型

因公司之前购买了阿里云的ES服务且版本为 5.5.3 ,下文选用的技术框架均基于此版本。

① Elasticsearch 5.5.3


一个基于Lucene的搜索服务器,提供了分布式的全文搜索引擎


② Logstash 5.5.3


开源的服务器端数据处理管道


③ Kibana 5.5.3


开源的分析和可视化平台


④ SpringBoot 2.0.4




系统环境



  • Linux Centos 7.3

  • JDK 1.8




基本概念


1.1 集群( cluster )

集群是由一个或者多个拥有相同 cluster.name 配置的节点组成,共同承担数据和负载压力,当节点数量发生变化时集群将会重新平均分布所有数据。


1.2 节点( node )

一个运行中的 ES 实例称为一个节点



  • 主节点负责管理集群范围内的所有变更,例如增加/删除索引,或者增加/删除节点等,且不需要涉及到文档级别的变更和搜索等操作

  • 任何节点都能成为主节点

  • 当集群只有一个主节点,即使流量增加也不会成为瓶颈


1.3 索引( index )



  • 名词;类似于传统关系数据库中的一个数据库

  • 动词;索引一个文档就是存储一个文档到一个索引(名词)中以便它可以被检索和查询到。类似于 SQL 语句中的 INSERT 关键词

  • 倒排索引;类似于传统关系型数据库中的索引概念,可以提升数据检索速度


1.4 类型( type )

一个索引包含一个或多个 type ,相当于传统关系型数据库中的表


1.5 文档( document )

相当于传统关系型数据库中的数据行


1.6 分片( shards )



  • 是一个底层的「工作单元」,仅保存了全部数据的一部分

  • 是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里

  • 当集群规模扩大或者缩小时, ES 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里

  • 分为「主分片」「副本分片」

  • 在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改;默认情况下会被分配「 5 」个主分片和「 1 」份副本(每个主分片拥有一个副本分片)

  • 相同主分片的副本分片不会放在同一个节点

① 主分片


索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量


② 副本分片( replicas )


只是一个主分片的拷贝,作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务





环境搭建


2.1 Elasticsearch


2.1.1 安装步骤

① 下载安装包:

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

② 解压并移动到 local 目录下

$ tar -zxvf elasticsearch-5.5.3.tar.gz
$ mv elasticsearch-5.5.3 /usr/local/elasticsearch

③ 修改 config 目录下的 elasticsearch.yml 文件

$ vim elasticsearch.yml

// 去掉行开头的 # 并重命名集群名,这里命名为 compass
cluster.name: compass
// 去掉行开头的 # 并重命名节点名,这里命名为 node-1
node.name: node-1

④ 进入 bin 目录启动 ES 并在后台运行

$ ./elasticsearch -d

⑤ 启动之后测试是否正常运行

$ curl 127.0.0.1:9200

返回结果:


{
"name" : "node-1",
"cluster_name" : "compass",
"cluster_uuid" : "Zuj5FBMUTjuHQXlAHreGvA",
"version" : {
"number" : "5.5.3",
"build_hash" : "9305a5e",
"build_date" : "2017-09-07T15:56:59.599Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}

2.1.2 如果提示「-bash: wget: command not found」则需要先安装 wget

$ yum -y install wget

2.1.3 ES 版本> = 5.0.0 时,是不能用超级管理员运行的,此时需要切换到普通账号或者新建 ES 账号

技术分享图片


解决办法:


① 新建用户组 elasticsearch

$ groupadd elasticsearch

② 新建用户并指定用户组

$ useradd -g elasticsearch elasticsearch

③ 修改 ES 目录所属者

$ chown -R elasticsearch:elasticsearch elasticsearch

④ 切换用户后再次启动

$ su elasticsearch

2.1.4 只能使用127.0.01或者localhost访问,使用ip地址无法访问?

解决办法:


① 修改 elasticsearch.yml 中的「network.host」

network.host: 0.0.0.0

② 重启 ES 出现如果如下报错,请依次按下面的步骤解决

ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max number of threads [3818] for user [elasticsearch] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]


每个进程最大同时打开文件数太小


修改 /etc/security/limits.conf 文件,增加如下配置,用户退出后重新登录生效

* soft nofile 65536
* hard nofile 65536

[2]: max number of threads [3818] for user [es] is too low, increase to at least [4096]


最大线程个数太低


同上修改 /etc/security/limits.conf 文件,增加如下配置,用户退出后重新登录生效

* soft nproc 4096
* hard nproc 4096

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


一个进程能拥有的最多的内存区域


修改 /etc/sysctl.conf 文件,增加如下配置,执行命令「 sysctl -p 」生效

vm.max_map_count=262144

③ 切换到 elasticsearch 用户并重启, curl 测试成功
技术分享图片




2.2 Logstash

① 下载安装包:

$ wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.3.tar.gz

② 解压并移动到 local 目录下

$ tar -zxvf logstash-5.5.3.tar.gz
$ mv logstash-5.5.3 /usr/local/logstash



2.3 Kibana

① 下载安装包:

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.3-linux-x86_64.tar.gz

② 解压并移动到 local 目录下

$ tar -zxvf kibana-5.5.3-linux-x86_64.tar.gz
$ mv kibana-5.5.3-linux-x86_64 /usr/local/kibana

③ 修改 config 目录下的 kibana.yml 文件

// 去掉当前行开头的 #
server.port: 5601
// 去掉当前行开头的#并将localhost修改为具体IP
server.host: "192.168.1.191"
// 去掉当前行开头的#并将localhost修改为具体IP
elasticsearch.url: "http://192.168.1.191:9200"

④ 启动 Kibana ,浏览器访问 http://192.168.1.191:5601

$ ./kibana

2.4 elasticsearch-head 插件(浏览器版)

① 「 Chrome 浏览器网上应用商店」或者「 Firefox 附加组件」搜索 elasticsearch head
技术分享图片

② 安装插件后点击浏览器地址栏右侧「放大镜图标」,顶部输入框中的 localhost 修改为服务器地址即可查看 ES 服务状态
技术分享图片




结语

至此 ELK 环境搭建完毕,下一篇具体介绍如何实现基础搜索服务。






推荐阅读
  • 搞懂 ELK 并不是一件特别难的事
    点击下方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!本篇文章主要介绍ELK的一些框架组成,原理和实践&#x ... [详细]
  • mysql+全文检索设计,基于sphinx+mysql全文检索架构设计.doc
    基于sphinxmysql全文检索架构设计.doc还剩2页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧& ... [详细]
  • ElasticSearch基本概念阐述
    下面阐述一下ES当中的一些常见词语含义:集群集群由一个或多个节点组成,对外提供服务,索引和搜索功能。在所有的节点中,一个集群有一个唯一的名称默认为“ElasticSearch” ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • NetBPM的安装还是比较简单的,有比较详细的文档。1.当然是先下载运行程序了,netbpm-0.8.3.1.zip,官方网站ÿ ... [详细]
  • 1.0为什么要做这个博客站?  在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了。而且下次再点击这个书签时,可能就会忘记当时为什么要添加这个书签了,更有可能书签连接已经无效。这样一来,也就不方便 ... [详细]
  • es的分布式原理?es是如何实现分布式的?
    Elasticsearch设计的理念是分布式搜索引擎,底层其实是基于lucene。核心思 ... [详细]
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • 几百行代码完成百度搜索引擎,真的可以吗?
    几百,行,代码,完成,百度,搜索, ... [详细]
  • javajigsaw2015年12月1日,星期二,在OpenJDK邮件列表中,MarkReinhold确认了许多人的期望:J ... [详细]
  • 双数组Trie树与AC自动机简要总结
    这部分的内容比较多,面面俱到不太现实,所以这里只是简单的概要描述,对需要了解的详细细节的 ... [详细]
author-avatar
手机用户2502941301
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有