草庐IT

ElasticSearch(相关概念+基于docker命令下安装教程)

LynnQi123 2023-07-17 原文

一、什么是ElasticSearch

 1.1简介

        ElasticSearch(以下简称ES)是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。也可以使用Java开发并使用Lucene作为其核心实现所有的索引和CRUD功能,可以通过简单的RestFul API来降低Lucene的复杂性,让全文检索变得更加简单。ES主要解决的问题是1)检索相关数据;2)返回统计结果;3)速度要快。

1.2ES核心概念

①index(索引):我们使用ES的根本目的是想把大量的数据存进去,然后再通过条件查询高效的取出我们所需要的数据然后满足业务需求。ES的功能就很像一个关系型的数据库比如mysql,而ES的index和数据库中的index不同,它相当于database。

②type(类型):type是用来定义数据结构的,在每一个index下面,可以有一个或者多个type,好比数据库里面的table,相当于表结构的描述,描述每个字段的类型。

③document(文档):document就是最终的数据,一个document就是一条记录。

④field(字段):一个document有一个或者多个field组成,field相当于一个字段

⑤shard(分页):一台服务器,无法存储大量的数据,ES把一个index里面的数据,分为多个shard,分布式的存储在各个服务器上面。

⑥replica(副本):一个分布式的集群,在实际运行的时候,难免会有一台或者多台服务器宕机,如果没有replica的概念,就会造成shard发成故障,无法提供正常的服务。在ES集群中,我们一模一样的数据有多份,能正常提供查询和插入的分片我们叫做 primary shard,其余的我们就管他们叫做 replica shard(备份的分片)当我们去查询数据的时候,我们数据是有备份的,它会同时发出命令让我们有数据的机器去查询结果,最后谁的查询结果快,我们就要谁的数据(这个不需要我们去控制,它内部就自己控制了)。

⑦Node(节点):就是集群中的一台服务器

⑧cluster(集群):ES是一个分布式的系统,在ES里面默认有一个配置,clustername 默认值就是ElasticSearch,如果这个值是一样的就属于同一个集群,不一样的值就是不一样的集群。

下图是ES与Mysql数据库的对照,方便理解ES的基本概念。

二、ElasticSearch的安装

1.docker镜像下载

docker pull elasticsearch : 5.6.8

 2.安装es容器

docker run -id --name = qyl _es  -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e"discovery.type=single-node"   -p 9200 : 9200 -p 9300 : 9300 elasticsearch : 5.6.8
(这里不加-e的环境变量可能会让docker容器内存不足而导致)
参数说明:

--name表示镜像启动后的容器名称  

-d: 后台运行容器,并返回容器ID;

-e: 指定容器内的环境变量

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
启动成功后截图:

 安装完成之后,es并不能正常使用,ES从5版本以后默认不开启远程连接,我们需要修改es的配置开启远程连接。

登录容器

docker exec -it qyl_es /bin/bash
查看目录结构
root@07f22eb41bb5 : /usr/share/elasticsearch# ls
显示的目录
NOTICE.txt README.textile bin config data lib logs modules plugins
进入config目录
cd config
修改 elasticsearch.yml ⽂件
root@07f22eb41bb5 : /usr/share/elasticsearch/config# vi elasticsearch.yml
bash : vi : command not found
vi 命令⽆法识别,因为 docker 容器⾥⾯没有该命令,我们可以安装该编辑器。
安装vim编辑器
apt-get update
apt-get install vim
安装完了之后 修改 elasticsearch.yml 配置
vi elasticsearch.yml
将transport.host :0.0.0.0之前的#去掉,放开端口
同时添加一行代码:
cluster.name : my-elasticsearch
重启docker
docker restart qyl_es
参数配置
修改vi/etc/sysctl.conf,追加内容
vm.max_map_count = 655360
执行下面内容 修改内核参数马上生效
sysctl -p
重启虚拟机
reboot
跨域配置
修改 elasticsearch/config 下的配置⽂件: elasticsearch.yml ,增加以下三句命令,并重启 :
http.cors.enabled : true
http.cors.allow-origin : "*"
network.host : 192.168.220.100
重启
docker restart qyl_es

三、ElasticSearch的客户端操作

实际开发中,主要有三种⽅式可以作为 elasticsearch 服务的客户端:
        第⼀种,elasticsearch-head 插件
        第⼆种,使⽤elasticsearch 提供的 Restful 直接访问
        第三种,使⽤elasticsearch 提供的 API 进⾏访问

四、IK分词器安装

IKAnalyzer 是⼀个开源的,基于 java 语⾔开发的轻量级的中⽂分词⼯具包。从 2006 12 ⽉推出 1.0 版开 始,IKAnalyzer 已经推出 了 3 个⼤版本。最初,它是以开源项⽬ Lucene 为应⽤主体的,结合词典分词和 ⽂法分析算法的中⽂分词组件。新版本的IKAnalyzer3.0 则发展为 ⾯向 Java 的公⽤分词组件,独⽴于 Lucene项⽬,同时提供了对 Lucene 的默认优化实现。
IK 分词器 3.0 的特性如下:
{
"query" : {
"term" : {
"title" : " 搜索 "
}
}
}
1 )采⽤了特有的 正向迭代最细粒度切分算法 ,具有 60 万字 / 秒的⾼速处理能⼒。
2 )采⽤了多⼦处理器分析模式,⽀持:英⽂字母( IP 地址、 Email URL )、数字(⽇期,常⽤中⽂数量词,罗马数字,科学计数法),中⽂词汇(姓名、地名处理)等分词处理。
3 )对中英联合⽀持不是很好 , 在这⽅⾯的处理⽐较⿇烦 . 需再做⼀次查询 , 同时是⽀持个⼈词条的优化的词典存储,更⼩的内存占⽤。
4 )⽀持⽤户词典扩展定义。
5 )针对 Lucene 全⽂检索优化的查询分析器 IKQueryParser ;采⽤歧义分析算法优化查询关键字的搜索排列组合,能极⼤的提⾼Lucene 检索的命中率。
注意:分词器的版本必须和ES的版本一致,我是5.6.8版本的ES就装5.6.8版本的分词器
IK分词器下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases
将下载完的ik分词器上传到服务器上,然后解压,并改名字为ik方便后续操作
unzip elasticsearch-analysis-ik-5.6.8.zip
mv elasticsearch ik
ik ⽬录拷贝到 docker 容器的 plugins ⽬录下
docker cp ./ik qyl_es : /usr/share/elasticsearch/plugins
重启
docker restart qyl_es

有关ElasticSearch(相关概念+基于docker命令下安装教程)的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  4. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  5. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  6. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  7. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  8. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  9. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  10. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

随机推荐