Elasticsearch 5:入门概览级操作(篇)
Elasticsearch既是一个简单又复杂的产品。 下面来介绍下一些基础知识,概览级别知识,如何使用一些REST API来使用它。 希望本教程能够让您更好地理解Elasticsearch是什么,
更重要的是,启发您进一步尝试其余的伟大功能!
下面的语句操作,只要你搭建好ela就可以直接使用了。直接将curl语句拷贝ela服务器执行即可。
1、查看集群健康命令cluster health:通过 _cat API.
集群green绿色就是正常状态
curl -XGET 'localhost:9200/_cat/health?v'
curl -XGET 'localhost:9200/_cat/nodes?v'
curl -XGET 'localhost:9200/_cat/indices?pretty'
2、创建索引Index:
创建一个名称为customer的索引
curl -XPUT 'localhost:9200/customer?pretty'
3、创建文档Document:
curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
"name": "John Doe"
}'
4、获取文档Document:
curl -XGET 'localhost:9200/customer/external/1?pretty'
获取id为1的文档信息
5、删除索引index
curl -XDELETE 'localhost:9200/customer'
6、修改文档数据:
curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
"name": "Jane Doe"
}'
7、update document
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
{
"doc": { "name": "Jane Doe" }
}'
8、删除文档
curl -XDELETE 'localhost:9200/customer/external/2?pretty'
9、Bulk API批量操作
不会因为其中一个执行失败而失败,它将继续处理其余的动作。 批量API返回时,它将为每个操作提供一个状态(按照发送的顺序),以便您可以检查特定操作是否失败
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty&pretty' -H 'Content-Type: application/json' -d'
{"index":{"_id":"5"}}
{"name": "John Doe" }
{"index":{"_id":"4"}}
{"name": "Jane Doe" }
'
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}'
10、读取示例数据-json文件
wget https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json
curl -H "Content-Type: application/json" -XPOST 'localhost:9200/bank/account/_bulk?pretty&refresh' --data-binary "@accounts.json"
curl 'localhost:9200/_cat/indices?v'
11、搜索API
以_search结尾
curl -XGET 'localhost:9200/bank/_search?q=*&sort=account_number:asc&pretty&pretty'
也可以通过如下"match_all": {}代替q=*
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}
'
12、几个查询参数
size、from
请注意,如果未指定size大小,则默认为10。
如果from不指定,则默认为0。
此示例执行match_all并按降序对帐户余额进行排序,并返回前10个(默认大小)文档。
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": { "match_all": {} },
"sort": { "balance": { "order": "desc" } }
}
'
13、执行搜索
默认是返回所有文档字段, 如果我们不希望整个源文档返回,我们有能力只需要返回源内的几个字段。
使用_source
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}
'
13.1 使用match_all来匹配所有文档
13.2 match_query现在我们来介绍一个叫做匹配查询的新查询,针对特定字段或者字段集合进行的搜索。(也就是SQL语句的where条件)
下面示例返回,编号为20的帐户:
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": { "match": { "account_number": 20 } }
}
'
如下返回地址为mill的
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": { "match": { "address": "mill" } }
}
'
13.3 bool query使用布尔逻辑组合查询
must子句『且』的关系
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
'
should子句or的关系
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
'
must_not 必须不包含
这个例子返回所有40岁但是状态不是ID的人的账号:
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"must": [
{ "match": { "age": "40" } }
],
"must_not": [
{ "match": { "state": "ID" } }
]
}
}
}
'
14、执行过滤器filter
在上面的query中,涉及到得分的概念,得分是一个数字值,它是文档与我们指定的搜索查询匹配度的相对度量。分数越高,文档越相关,分数越低,文档就越不相关。
但查询并不总是需要产生分数,特别是当它们仅用于“过滤”文档集时。 有助于提高性能,
比如我搜索余额在20000-30000的数据,不需要计算分数的,只是一个区间过滤
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}
'
在上述情况中,范围查询是非常有意义的,因为落入该范围的文档全部匹配“平等”,而且免去了计算相关度分数这个操作。
15、Aggregations执行聚合
聚合提供了从数据中分组和提取统计数据的能力。
考虑聚合的简单方法是将其大致等同于SQL语句的 GROUP BY和SQL聚合函数(sum、avg等等)。 在Elasticsearch中,您可以执行搜索并返回匹配,同时还可以在一个响应中返回与匹配不同的聚合结果。 这是非常强大和高效的,因为您可以运行查询和多个聚合,并且一次性获得两个(或两个)操作的结果,简化的API来实现节约网络交互。
首先,本示例按状态对所有帐户进行分组,然后返回按降序排序的前10个状态:
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword"
}
}
}
}
'
上面语句类似于sql语句
SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC
请注意,我们将size = 0设置为不显示搜索命中的query结果,因为我们只想看到响应中的agg聚合的结果。
如下:本示例按状态计算平均账户余额:
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword"
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
'
本教程只是让您更好地理解Elasticsearch是什么,更重要的是,启发您进一步尝试其余的伟大功能!
后面会发出更多更具体实用的教程,后续更新。
相关文章