Elasticsearch 5:入门概览级操作(篇)

2020-06-01 00:00:00 语句 文档 返回 匹配 聚合

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 raw.githubusercontent.com

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是什么,更重要的是,启发您进一步尝试其余的伟大功能!

后面会发出更多更具体实用的教程,后续更新。

相关文章