es官方文档解读

本文详细介绍了Elasticsearch的主要操作,包括创建索引、列出索引、插入数据、检索文档、更新和删除文档,以及Bulk API和Search API的使用。重点讲解了如何通过RESTful API进行数据管理,如使用POST和PUT动词插入数据,利用_update进行文档更新,以及如何进行文档的批量处理。文章还涵盖了搜索查询,如布尔查询、聚合查询,以及实时性和版本控制的概念。
摘要由CSDN通过智能技术生成

 PUT /customer?pretty  创建索引customer,返回json格式
 GET /_cat/indices?v  列出所有索引列表
 PUT /customer/doc/1?pretty  在客户索引中插入数据(动词 /索引[库名]/类型[表名]/id?返回json格式的响应)
{
  "name": "yufei"
}
Get /customer/doc/1?pretty  检索编入的索引文档
*_source:指lucene的document,相当于数据库表中的一行记录
DELETE /customer?pretty  删除索引
ElasticSearch访问数据的模式:<REST动词> / <索引> / <类型> / <ID>
*索引时,ID部分是可选的,如果未指定,Elasticsearch将生成随机ID,然后使用它来索引文档。Elasticsearch生成的实际ID(或前面示例中显式指定的内容)将作为索引API调用的一部分返回
*POST动词而不是PUT,因为我们没有指定ID
POST /customer/doc?pretty  插入数据没有指定id时用动词post,自动生成字符串id(UUID)
{
  "name": "Jane Doe"
}
更新文档:
*Elasticsearch实际上并没有在内部进行就地更新。每当我们进行更新时,Elasticsearch都会删除旧文档,然后一次性对应用了更新的新文档编制索引
更新之前的文档并加入字段age    
POST /customer/doc/1/_update?pretty    更新文档用动词post,id后用_update
{
  "doc": { "name": "Jane Doe", "age": 20 }  这儿的doc值lucene的docuemt,相当于数据库表                                           中的一行记录
}

也可以使用简单脚本执行更新。此示例使用脚本将年龄增加5:

POST /customer/doc/1/_update?pretty
{
  "script" : "ctx._source.age += 5"
}

在上面的示例中,ctx._source指的是即将更新的当前源文档。
Elasticsearch提供了在给定查询条件(如SQL UPDATE-WHERE语句)的情况下更新多个文档的功能
*删除文档 相当于删除表中的一行记录
DELETE /customer/doc/2?pretty   删除文档用动词delete
————————————————————————————————————————————————————————————————————————————————————
_bulkAPI批处理:用来多条执行上述操作
Bulk API不会因其中一个操作失败而失败。如果单个操作因任何原因失败,它将继续处理其后的其余操作。批量API返回时,它将为每个操作提供一个状态(按照发送的顺序),以便您可以检查特定操作是否失败
POST /customer/doc/_bulk?pretty
{"index":{"_id":"3"}}
{"name": "John Doe" }
{"index":{"_id":"4"}}
{"name": "Jane Doe" }

对于删除操作,之后没有相应的源文档,因为删除只需要删除文档的ID。
POST /customer/doc/_bulk?pretty    bulk批处理更新并删除文档
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"3"}}
——————————————————————————————————————————————————————————————————————————
样本:
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/doc/_bulk?pretty&refresh" --data-binary "@accounts.json"
curl "localhost:9200/_cat/indices?v"

————————————————————————————————Search API————————————————————————————————————————
1、请求以URL方法:
GET /bank/_search?q=*&sort=account_number:asc&pretty
动词/索引/搜索?匹配所有文档&升序进行排序
q=*参数指示Elasticsearch匹配索引中的所有文档。该sort=account_number:asc参数指示使用account_number每个文档的字段以升序对结果进行排序。该pretty参数再次告诉Elasticsearch返回漂亮打印的JSON结果
返回结果刨析:
took - Elasticsearch执行搜索的时间(以毫秒为单位)
timed_out - 告诉我们搜索是否超时
_shards - 告诉我们搜索了多少个分片,以及搜索成功/失败分片的计数
hits - 搜索结果
hits.total - 符合我们搜索条件的文档总数
hits.hits - 实际的搜索结果数组(默认为前10个文档)
hits.sort - 对结果进行排序(如果按分数排序则丢失)
hits._score并max_score- 暂时忽略这些字段
2、不是传入q=* url,采用_search API提供json格式的请求体
GET /bank/_search
{
  "query": { "match_all": {} },  匹配所有文档
  "sort": [
    { "account_number": "asc" }   按account_number排序(升序)
  ]
}
一旦您获得了搜索结果,Elasticsearch就完全完成了请求,并且不会在结果中维护任何类型的服务器端资源或打开游标。这与SQL等许多其他平台形成鲜明对比,其中您可能最初预先获得查询结果的部分子集,然后如果要获取(或翻页)其余的则必须连续返回服务器使用某种有状态服务器端游标的结果。
—————————————————————————————————————————— Query DSL——————————————————————————————————
GET / bank / _search
{
  “query”:{“match_all”:{}}   搜索所有文档
  "size": 1    请注意,如果size未指定,则默认为10。实际搜索的结果,返回前几个文档

}
query部分告诉我们查询定义是什么,match_all部分只是我们想要运行的查询类型。该match_all查询仅仅是在指定索引的所有文件进行搜索
GET /bank/_search
{
  "query": { "match_all": {} },
  "from": 10,    返回文档10-19,用于分页
  "size": 10
}
在from(从0开始)参数规定了从启动该文件的索引和size参数指定了多少文件,返回从参数开始的。在实现搜索结果的分页时,此功能非常有用。请注意,如果from未指定,则默认为0
GET / bank / _search  按账户余额排序,返回前10个默认文档
{
  “query”:{“match_all”:{}},
  “sort”:{“balance”:  排序字段
  {“order”:“desc”}     排序方式
  }
}
————————————————————————————————————————————————————————————————————————————
搜索返回指定字段  返回两个字段account_number和balance(内部_source)
概念与SQL SELECT FROM字段列表有些相似
GET /bank/_search
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]    
}
———————————————————————match查询针对特定字段或字段集进行的搜索————————————————————————————————
返回编号为20的帐户: match 指定要查询的字段

GET /bank/_search
{
  "query": { "match": { "account_number": 20 } }
}
地址中包含术语“mill”或“lane”的所有帐户    包含两个元素用空格隔开  示例是match(match_phrase)的变体
GET /bank/_search
{
  "query": { "match": { "address":"mill lane"}}
}
———————————————————————————————————bool查询———————————————————————————————————————————————————————
使用布尔逻辑将较小的查询组成更大的查询。
(1)bool must  必须两这都包含,相当于sql中的and
此示例组成两个match查询并返回地址中包含“mill”和“lane”的所有帐户:
GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞腾创客

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值