黑马程序员技术交流社区
标题:
【石家庄校区】全文搜索引擎 Elasticsearch 入门教程(1)
[打印本页]
作者:
htb52110
时间:
2018-3-15 13:32
标题:
【石家庄校区】全文搜索引擎 Elasticsearch 入门教程(1)
全文搜索引擎 Elasticsearch 入门教程
全文搜索
属于最常见的需求,开源的
Elasticsearch
(以下简称 Elastic)是目前全文搜索引擎的首选。
它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。
BF02A06A013C4771A2342D73AA2C9A8E.jpeg
(16 KB, 下载次数: 14)
下载附件
2018-3-15 13:33 上传
Elastic 的底层是开源库
Lucene
。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
本文从零开始,讲解如何使用 Elastic 搭建自己的全文搜索引擎。每一步都有详细的说明,大家跟着做就能学会。
一、安装
Elastic 需要 Java 8 环境。如果你的机器还没安装 Java,可以参考
这篇文章
,注意要保证环境变量
JAVA_HOME
正确设置。
安装完 Java,就可以跟着
官方文档
安装 Elastic。直接下载压缩包比较简单。
$ wget https
:
//
artifacts
.
elastic
.
co
/
downloads
/
elasticsearch
/
elasticsearch
-5.5
.
1
.
zip$ unzip elasticsearch
-5.5
.
1
.
zip$ cd elasticsearch
-5.5
.
1
/
接着,进入解压后的目录,运行下面的命令,启动 Elastic。
$
.
/
bin
/
elasticsearch
如果这时
报错
"max virtual memory areas vm.maxmapcount [65530] is too low",要运行下面的命令。
$ sudo sysctl
-
w vm
.
max_map_count
=
262144
如果一切正常,Elastic 就会在默认的9200端口运行。这时,打开另一个命令行窗口,请求该端口,会得到说明信息。
$ curl localhost
:
9200
{
"name"
:
"atntrTf"
,
"cluster_name"
:
"elasticsearch"
,
"cluster_uuid"
:
"tf9250XhQ6ee4h7YI11anA"
,
"version"
:{
"number"
:
"5.5.1"
,
"build_hash"
:
"19c13d0"
,
"build_date"
:
"2017-07-18T20:44:24.823Z"
,
"build_snapshot"
:
false
,
"lucene_version"
:
"6.6.0"
},
"tagline"
:
"You Know, for Search"
}
上面代码中,请求9200端口,Elastic 返回一个 JSON 对象,包含当前节点、集群、版本等信息。
按下 Ctrl + C,Elastic 就会停止运行。
默认情况下,Elastic 只允许本机访问,如果需要远程访问,可以修改 Elastic 安装目录的
config/elasticsearch.yml
文件,去掉
network.host
的注释,将它的值改成
0.0.0.0
,然后重新启动 Elastic。
network
.
host
:
0.0
.
0.0
上面代码中,设成
0.0.0.0
让任何人都可以访问。线上服务不要这样设置,要设成具体的 IP。
二、基本概念
2.1 Node 与 Cluster
Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
2.2 Index
Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。
所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。
下面的命令可以查看当前节点的所有 Index。
$ curl
-
X GET
'
http://localhost
:9200/_cat/indices?v'
2.3 Document
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
Document 使用 JSON 格式表示,下面是一个例子。
{
"user"
:
"张三"
,
"title"
:
"工程师"
,
"desc"
:
"数据库管理"
}
同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。
2.4 Type
Document 可以分组,比如
weather
这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。
不同的 Type 应该有相似的结构(schema),举例来说,
id
字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的
一个区别
。性质完全不同的数据(比如
products
和
logs
)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。
下面的命令可以列出每个 Index 所包含的 Type。
$ curl
'localhost:9200/_mapping?pretty=true'
根据
规划
,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。
三、新建和删除 Index
新建 Index,可以直接向 Elastic 服务器发出 PUT 请求。下面的例子是新建一个名叫
weather
的 Index。
$ curl
-
X PUT
'localhost:9200/weather'
服务器返回一个 JSON 对象,里面的
acknowledged
字段表示操作成功。
{
"acknowledged"
:
true
,
"shards_acknowledged"
:
true
}
然后,我们发出 DELETE 请求,删除这个 Index。
$ curl
-
X DELETE
'localhost:9200/weather'
作者:
Yin灬Yan
时间:
2018-3-15 14:10
我来占层楼啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2