elasticsearch上手指南

CentOS上安装elasticsearch

首先需要JAVA环境,这里不再详述。
官网下载页面找到RMP包的下载路径,通过wget命令下载安装包到本地:

1
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.3/elasticsearch-2.3.3.rpm

执行安装

1
sudo rpm -ivh elasticsearch-2.3.3.rpm

默认安装到/usr/share/elasticsearch/,配置文件在/etc/elasticsearch,init脚本在/etc/init.d/elasticsearch
添加为服务:

1
sudo systemctl enable elasticsearch.service

启动:

1
sudo /etc/init.d/elasticsearch start

查看:

1
curl http://localhost:9200

创建一个文稿

1
curl -XPUT 'localhost:9200/get-together/group/1?pretty' -d '{ "name": "Elasticsearch Denver", "organizer": "Lee" }'

可以看到返回信息:

1
2
3
4
5
6
7
8
9
10
11
12
{
"_index" : "get-together",
"_type" : "group",
"_id" : "1",
"_version" : 1,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : true
}

Elasticsearch自动添加了get-together索引,并创建了一个到类型group的映射。
当然你也可以手动创建一个索引:

1
curl -XPUT 'localhost:9200/new-index'

Elasticsearch自动将nameorganizer检测为string类型,如果你又添加了一个文稿,包含除了nameorganizer的其他字段,Elasticsearch也会自动检测它的类型并添加到映射。
可以查看这个映射的详细信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
curl 'localhost:9200/get-together/_mapping/group?pretty
{
"get-together" : {
"mappings" : {
"group" : {
"properties" : {
"name" : {
"type" : "string"
},
"organizer" : {
"type" : "string"
}
}
}
}
}
}

开始搜索

添加一些示例文稿:

1
2
git clone git@github.com:suclogger/elasticsearch-in-action.git
sh elasticsearch-in-action/populate.sh

这个脚本会重建我们之前创建的get-together索引。
一个简单的搜索:

1
curl "localhost:9200/get-together/group/_search?q=elasticsearch&fields=name,location&size=1&pretty"

curl请求的链接中,get-together/group指定了范围:get-together索引下的group类型。
常见的关键词格式是:q=name:elasticsearch,这里没有指定group下的某个参数,elasticsearch会默认指定为q=_all:elasticsearch来搜索所有参数字段。
也可以通过,分隔来同时搜索多个类型,如:curl "localhost:9200/get-together/group,event/_search?q=elasticsearch&fields=name,location&size=1&pretty",或者完全忽略类型部分来搜索所有类型:curl "localhost:9200/get-together/_search?q=elasticsearch&fields=name,location&size=1&pretty"
类似的,也可以通过,分隔来同时搜索多个索引,如:curl "localhost:9200/get-together,other-index/_search\ ?q=elasticsearch&pretty",当然这个请求会失败,因为我们还没创建other-index索引。也可以指定_all来搜索所有索引。
返回的结果中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 0.83339834,
"hits" : [ {
"_index" : "get-together",
"_type" : "group",
"_id" : "2",
"_score" : 0.83339834,
"fields" : {
"name" : [ "Elasticsearch Denver" ]
}
} ]
}
}

took表示查询耗时5ms,timed_out为false表示查询未超时(默认下查询永远不会超时,可以在curl链接后附带&timeout=3s来指定超时时间为3s)