ElasticSearch入门详解

[复制链接]
发表于 2025-9-7 12:57:56 | 显示全部楼层 |阅读模式
1.ElasticSearch

1.1
ElasticSearch(简称es)


Elasticsearch是用Java开发并且是当前最盛行的开源的企业级搜索引擎。
能够到达及时搜索,稳固,可靠,快速,安装使用方便。
客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。
官方网站:
https://www.elastic.co/
下载地址:https://www.elastic.co/cn/start

1.2
ElasticSearch与Lucene的关系


Lucene可以被以为是迄今为止最先辈、性能最好的、功能最全的搜索引擎库(框
架)
但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用
中,并且Lucene的配置及使用非常复杂,你需要深入相识检索的相干知识来理解它
是如何工作的。
Lucene缺点:
1)只能在Java项目中使用,并且要以jar包的方式直接集成项目中.
2)使用非常复杂-创建索引和搜索索引代码繁杂
3)不支持集群环境-索引数据差别步(不支持大型项目)
4)索引数据假如太多就不行,索引库和应用地点同一个服务器,共同占用硬
盘.共用空间少.
上述Lucene框架中的缺点,ES全部都能办理

1.3
哪些公司在使用Elasticsearch



  •         京东
  •         携程
  •         去哪儿
  •         58同城
  •         滴滴
  •         今日头条
  •         小米
  •         哔哩哔哩
  •         等等

1.4
ES
vs
关系型数据库



2.Lucene全文检索框架

2.1
什么是全文检索


全文检索是指:
-
通过一个程序扫描文本中的每一个单词,针对单词建立索引,并生存该单
 
词在文本中的位置、以及出现的次数
-
用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位
 
置、出现的次数返回给用户,因为有了详细文本的位置,所以就可以将详细内
 
容读取出来了

3.Elasticsearch中的核心概念

3.1
索引
index


一个索引就是一个拥有几分相似特征的文档的聚集。好比说,可以有一个客户数据
的索引,另一个产物目录的索引,另有一个订单数据的索引
一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这
个索引中的文档举行索引、搜索、更新和删除的时间,都要使用到这个名字
3.2
映射
mapping


ElasticSearch中的映射(Mapping)用来界说一个文档
mapping是处置惩罚数据的方式和规则方面做一些限定,如某个字段的数据范例、默认
值、分词器、是否被索引等等,这些都是映射里面可以设置的
3.3
字段Field


相当于是数据表的字段|列
3.4
字段范例
Type


每一个字段都应该有一个对应的范例,例如:Text、Keyword、Byte等
3.5
文档
document


一个文档是一个可被索引的底子信息单位,类似一条记录。文档以JSON(Javascript
Object
Notation)格式来表示;
3.6
集群
cluster


一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提
供索引和搜索功能
3.7
节点
node


一个节点是集群中的一个服务器,作为集群的一部门,它存储数据,到场集群的索
引和搜索功能
一个节点可以通过配置集群名称的方式来参加一个指定的集群。默认情况下,每
个节点都会被安排参加到一个叫做“elasticsearch”的集群中
这意味着,假如在网络中启动了多少个节点,并假定它们能够相互发现相互,它们
将会主动地形成并参加到一个叫做“elasticsearch”的集群中
在一个集群里,可以拥有任意多个节点。而且,假如当前网络中没有运行任何
Elasticsearch节点,这时启动一个节点,会默认创建并参加一个叫
做“elasticsearch”的集群。
3.8
分片和副本
shards&replicas


3.8.1
分片



  •         一个索引可以存储超出单个结点硬件限定的大量数据。好比,一个具有10
            亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或
            者单个节点处置惩罚搜索请求,响应太慢
  •         为相识决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些
            份就叫做分片
  •         当创建一个索引的时间,可以指定你想要的分片的数量
  •         每个分片本身也是一个功能美满并且独立的“索引”,这个“索引”可以
            被放置到集群中的任何节点上
  •         分片很重要,主要有两方面的缘故原由
            允许水中分割/扩展你的内容容量
            允许在分片之上举行分布式的、并行的操作,进而进步性能/吞吐量
  •         至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由
            Elasticsearch管理的,对于作为用户来说,这些都是透明的
3.8.2
副本



  •         在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎
            么的就处于离线状态,大概由于任何缘故原由消失了,这种情况下,有一个故障转
            移机制是非常有用并且是猛烈保举的。为此目的,Elasticsearch允许你创建分
            片的一份或多份拷贝,这些拷贝叫做副天职片,大概直接叫副本
  •         副本之所以重要,有两个主要缘故原由

  •         在分片/节点失败的情况下,提供了高可用性。注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的
  •         扩展搜索量/吞吐量,因为搜索可以在全部的副本上并行运行每个索引可以被分成多个分片。一个索引有0个或多个副本一旦设置了副本,每个索引就有了主分片和副天职片,分片和副本的数量可以在索引创建的时间指定,索引创建之后,可以在任何时间动态地改变副本的数量,但是不能改变分片的数量

4.安装Elasticsearch

4.1
安装Elasticsearch


4.1.1
创建普通用户


**ES不能使用root用户来启动,必须使用普通用户来安装启动。**这里我们创建一个普通用户以及界说一些常规目任命于存放我们的数据文件以及安装包等。创建一个es专门的用户(必须)
使用root用户在服务器实行以下下令
  1. 先创建组,
  2. 再创建用户:
  3. 1)创建
  4. elasticsearch
  5. 用户组
  6. [root@localhost
  7. ~]#
  8. groupadd
  9. elasticsearch
  10.                
  11. 2)创建用户
  12. tlbaiqi
  13. 并设置密码
  14. [root@localhost
  15. ~]#
  16. useradd
  17. aaa
  18. [root@localhost
  19. ~]#
  20. passwd
  21. aaa
  22. 3)# 创建es文件夹,
  23. 并修改owner为aaa用户
  24. mkdir
  25. -p
  26. /usr/local/es
  27. 4)用户es
  28. 添加到
  29. elasticsearch
  30. 用户组
  31. [root@localhost
  32. ~]#
  33. usermod
  34. -G
  35. elasticsearch
  36. tlbaiqi
  37. [root@localhost
  38. ~]#
  39. chown
  40. -R
  41. aaa
  42. /usr/local/es/elasticsearch-7.6.1
  43. 5)设置sudo权限
  44. #为了让普通用户有更大的操作权限,我们一般都会给普通用户设置sudo权限,方便普通用户的操作
  45. #三台机器使用root用户执行visudo命令然后为es用户添加权限
  46. [root@localhost
  47. ~]#
  48. visudo
  49. #在root
  50. ALL=(ALL)
  51. ALL
  52. 一行下面
  53. #添加tlbaiqi用户
  54. 如下:
  55. aaa
  56. ALL=(ALL)
  57. ALL
  58.                        
  59. #添加成功保存后切换到aaa用户操作
  60. [root@localhost
  61. ~]#
  62. su
  63. aaa
  64. [aaa@localhost
  65. root]$
  66. # 解压Elasticsearch
  67. su
  68. tlbaiqi
  69. cd
  70. /user/local/
  71. tar
  72. -zvxf
  73. elasticsearch-7.6.1-linux-x86_64.tar.gz
  74. -C
  75. /usr/local/es/
  76. #进入服务器使用baiqi用户来修改配置文件
  77. cd
  78. /usr/local/es/elasticsearch-7.6.1/config
  79. mkdir
  80. -p
  81. /usr/local/es/elasticsearch-7.6.1/log
  82. mkdir
  83. -p
  84. /usr/local/es/elasticsearch-7.6.1/data
  85. rm
  86. -rf
  87. elasticsearch.yml
  88. vim
  89. elasticsearch.yml
  90. cluster.name:
  91. aaa-es
  92. node.name:
  93. node1
  94. path.data:
  95. /usr/local/es/elasticsearch-7.6.1/data
  96. path.logs:
  97. /usr/local/es/elasticsearch-7.6.1/log
  98. network.host:
  99. 0.0.0.0
  100. http.port:
  101. 9200
  102. discovery.seed_hosts:
  103. ["服务器IP"]
  104. cluster.initial_master_nodes:
  105. ["节点名"]
  106. bootstrap.system_call_filter:
  107. false
  108. bootstrap.memory_lock:
  109. false
  110. http.cors.enabled:
  111. true
  112. http.cors.allow-origin:
  113. "*"
  114. #修改jvm.option
  115. cd
  116. /usr/local/es/elasticsearch-7.6.1/config
  117. vim
  118. jvm.options
  119. -Xms2g
  120. -Xmx2g
  121. #4.2
  122.  修改系统配置,解决启动时候的问题
  123. #由于现在使用普通用户来安装es服务,且es服务对服务器的资源要求比较多,包括内存大小,线程数等。所以我们需要给普#通用户解开资源的束缚
  124. #4.2.1
  125.  普通用户打开文件的最大数限制
  126. #问题错误信息描述:
  127. #max
  128. file
  129. descriptors
  130. [4096]
  131. for
  132. elasticsearch
  133. process
  134. likely
  135. too
  136. low,
  137. increase
  138. to
  139. at
  140. least
  141. #[65536]
  142. #ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限##
  143. #制,不然ES启动就会抛错
  144. sudo
  145. vi
  146. /etc/security/limits.conf
  147. #添加如下内容:
  148. 注意*不要去掉了
  149. *
  150. soft
  151. nofile
  152. 65536
  153. *
  154. hard
  155. nofile
  156. 131072
  157. *
  158. soft
  159. nproc
  160. 2048
  161. *
  162. hard
  163. nproc
  164. 4096
  165. #普通用户启动线程数限制
  166. #问题错误信息描述
  167. #max
  168. number
  169. of
  170. threads
  171. [1024]
  172. for
  173. user
  174. [es]
  175. likely
  176. too
  177. low,
  178. increase
  179. to
  180. at
  181. least
  182. [4096]
  183. #修改普通用户可以创建的最大线程数
  184. #max
  185. number
  186. of
  187. threads
  188. [1024]
  189. for
  190. user
  191. [es]
  192. likely
  193. too
  194. low,
  195. increase
  196. to
  197. at
  198. least
  199. [4096]原因:#无法创建本地线程问题,用户最大可创建线程数太小解决方案:修改90-nproc.conf
  200. 配置文件。
  201. Centos6
  202. sudo
  203. vi
  204. /etc/security/limits.d/90-nproc.conf
  205. Centos7
  206. sudo
  207. vi
  208. /etc/security/limits.d/20-nproc.conf
  209. *
  210. soft
  211. nproc
  212. 1024#修改为
  213. *
  214. soft
  215. nproc
  216. 4096
  217. #4.2.3
  218. 普通用户调大虚拟内存
  219. #错误信息描述:
  220. #max
  221. virtual
  222. memory
  223. areas
  224. vm.max_map_count
  225. [65530]
  226. likely
  227. too
  228. low,
  229. increase
  230. to
  231. at
  232. least
  233. #[262144]
  234. #调大系统的虚拟内存
  235. #原因:最大虚拟内存太小
  236. #每次启动机器都手动执行下。
  237. #三台机器执行以下命令
  238. sudo
  239. vim
  240. /etc/sysctl.conf
  241. #追加以下内容:
  242. vm.max_map_count=262144
  243. sysctl
  244. -p
  245. #4.3
  246.  启动ES服务
  247. #三台机器使用aaa用户执行以下命令启动es服务
  248. nohup
  249. /usr/local/es/elasticsearch-7.6.1/bin/elasticsearch
  250. 2>&1
  251. &
  252. #后台启动ES
  253. 进入bin目录
  254. ./elasticsearch
  255. -d
  256. #启动成功之后jsp即可看到es的服务进程,并且访问页面
  257. http://192.168.21.130:9200/?pretty
  258. #这个路径下面去查看错误日志日志
  259. #关闭Linux防火墙
  260. #永久性生效,重启后不会复原
  261. #开启: chkconfig
  262. iptables
  263. on
  264. #关闭: chkconfig
  265. iptables
  266. off
  267. #即时生效,重启后复原
  268. #开启: service
  269. iptables
  270. start
  271. #关闭: service
  272. iptables
  273. stop
复制代码
5.ES数据管理

8.1
ES数据管理概述


ES是面向文档(document
oriented)的,这意味着它可以存储整个对象或文档(document)。
然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。
在ES中,你可以对文档(而非成行成列的数据)举行索引、搜索、排序、过滤。
ES使用JSON作为文档序列化格式。
JSON如今已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
ES存储的一个员工文档的格式示例:
  1. {
  2. "email":
  3. "584614151@qq.com",
  4. "name":
  5. "张三",
  6. "age":
  7. 30,
  8. "interests":
  9. [
  10. "篮球",
  11. "健身"
  12. ]
  13. }
  14.  
复制代码
复制代码
8.2
根本操作



  •         创建索引
格式:
PUT
/索引名称
举例:
PUT
/es_db

  •         查询索引
格式:
GET
/索引名称
举例:
GET
/es_db


  •         删除索引
格式:
DELETE
/索引名称
举例:
DELETE
/es_db

  •         添加文档
格式:
PUT
/索引名称/范例/id
举例:
PUT
/es_db/doc/1
{
"name":
"张三",
"sex":
1,
"age":
25,
"address":
"广州天河公园",
"remark":
"java
developer"
}
PUT
/es_db/
doc/2
{
"name":
"李四",
"sex":
1,
"age":
28,
"address":
"广州荔湾大厦",
"remark":
"java
assistant"
}
PUT
/es_db/doc/3
{
"name":
"rod",
"sex":
0,
"age":
26,
"address":
"广州白云山公园",
"remark":
"php
developer"
}
PUT
/es_db/
doc/4
{
"name":
"admin",
"sex":
0,
"age":
22,
"address":
"长沙橘子洲头",
"remark":
"python
assistant"
}
PUT
/es_db/_doc/5
{
"name":
"小明",
"sex":
0,
"age":
19,
"address":
"长沙岳麓山",
"remark":
"java
architect
assistant"
}


  •         修改文档
格式:
PUT
/索引名称/范例/id
举例:
PUT
/es_db/_doc/1
{
"name":
"白起老师",
"sex":
1,
"age":
25,
"address":
"张家界
森林公园",
"remark":
"php
developer
assistant"
}
注意OST和PUT都能起到创建/更新的作用
1、需要注意的是==PUT==需要对一个详细的资源举行操作也就是要确定id才气举行==更新/创建,而==POST==是可以针对整个资源聚集举行操作的,假如不写id就由ES生成一个唯一id举行==创建==新文档,假如填了id那就针对这个id的文档举行创建/更新
2、PUT只会将json数据都举行替换,
POST只会更新雷同字段的值
3、PUT与DELETE都是幂等性操作,
即不论操作多少次,
结果都一样


  •         查询文档
格式:
GET
/索引名称/范例/id
举例:
GET
/es_db/_doc/1

  •         删除文档
格式:
DELETE
/索引名称/范例/id
举例:
DELETE
/es_db/_doc/1


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表