概述
之前本人只简单使用过 Solr,而 Elasticsearch 与 solr 相比:
solr
优点
- solr有一个更大、更成熟的用户、开发和贡献者社区
- 支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式
- Solr比较成熟、稳定
- 不考虑建索引的同时进行搜索,速度更快
缺点
- 建立索引时,搜索效率下降,实时索引搜索效率不高
Elasticsearch
优点
- Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”
- Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索
- 处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置
- Elasticsearch 采用 Gateway 的概念,使得完备份更加简单
- 各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作
缺点
- 还不够自动,不适合当前新的Index Warmup API (参考:http://zhaoyanblog.com/archives/764.html)
安装
使用 docker 进行安装,这里记录下启动命令的参数(默认初始占用2G堆内存空间):
docker run -e ES_JAVA_OPTS="-Xms256M -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name [容器名] [镜像id]
访问:http://192.168.43.244:9200,看到如下页面则为成功:
入门
同样我们可以参考官方中文文档:Elasticsearch 权威指南
关于文档
Elasticsearch 使用 JSON 作为文档的序列化格式,如一个 user 对象:
{
"email": "john@smith.com",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [ "dolphins", "whales" ]
},
"join_date": "2014/05/01"
}
关于索引
- 作为动词:存储数据到 Elasticsearch 的行为叫做 索引
- 作为名词:一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方,如下图:
知道了上面的概念,我们就可以来在 Elasticsearch 中操作文档数据: - 索引一个文档: 发送 PUT 请求到 http://192.168.43.244:9200/megacorp/employee/1,并带上 JSON 文档数据,就会保存在相应索引下 id 为 1 的位置。
- 检索一个文档: 发送 GET 请求到 http://192.168.43.244:9200/megacorp/employee/1,即可获得 JSON 文档数据。
- 同样的,可以使用 DELETE 命令来删除文档,以及使用 HEAD 指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT 。
不同的检索功能:
- 轻量搜索:/megacorp/employee/_search?q=last_name:Smith。
- 复杂搜索:使用查询表达式搜索,match 查询、范围查询 filter…。
{
"query" : {
"bool": {
"must": {
"match" : {
"last_name"