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" } }
]
}
}