Elasticsearch 简明教程
Elasticsearch - API Conventions
网络中的应用程序编程接口 (API) 是一组函数调用或其他编程指令,用于访问特定 Web 应用程序中的软件组件。例如,Facebook API 帮助开发人员通过访问 Facebook 中的数据或其他功能来创建应用程序;它可以是出生日期或状态更新。
Elasticsearch 提供了一个 REST API,该 API 通过 HTTP 上的 JSON 进行访问。Elasticsearch 使用了一些约定,我们现在将讨论它们。
Multiple Indices
API 中的大多数操作(主要是搜索和其他操作)面向一个或多个索引。这使用户只需执行一次查询即可在多个位置或所有可用数据中进行搜索。使用许多不同的符号在多个索引中执行操作。我们将在本章中讨论其中的几个。
Wildcards ( * , + , –)
POST /school*/_search
Response
所有索引中包含“school”开头的但不包含 schools_gov 并且包含 CBSE 的 JSON 对象。
还有一些 URL 查询字符串参数:-
-
ignore_unavailable - 如果 URL 中存在的一个或多个索引不存在,则不会发生错误或停止操作。例如,schools 索引存在,但 book_shops 不存在。
POST /school*,book_shops/_search
Request Body
{
"error":{
"root_cause":[{
"type":"index_not_found_exception", "reason":"no such index",
"resource.type":"index_or_alias", "resource.id":"book_shops",
"index":"book_shops"
}],
"type":"index_not_found_exception", "reason":"no such index",
"resource.type":"index_or_alias", "resource.id":"book_shops",
"index":"book_shops"
},"status":404
}
考虑以下代码:-
POST /school*,book_shops/_search?ignore_unavailable = true
allow_no_indices
true 此参数的值可防止错误,如果带通配符的 URL 导致没有索引。例如,没有以 schools_pri 开头的索引
POST /schools_pri*/_search?allow_no_indices = true
expand_wildcards
这个参数决定了通配符是需要扩展成开指标还是闭指标,或同时执行这两种操作。此参数的值可以是 open 和 closed,也可以是 none 和 all。
例如,关闭索引学校:
POST /schools/_close
Date Math Support in Index Names
Elasticsearch 提供一种按照日期和时间搜索索引的功能。我们需要使用特定格式指定日期和时间。例如,accountdetail-2015.12.30,索引将存储 2015 年 12 月 30 日的银行帐户详细信息。可以执行数学运算以获取特定日期或日期和时间范围的详细信息。
日期数学索引名称格式:
<static_name{date_math_expr{date_format|time_zone}}>
/<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search
static_name 是表达的一部分,在每个日期数学索引(如帐户详细信息)中保持不变。date_math_expr 包含确定日期和时间(如 now-2d)的数学表达式。date_format 包含日期在索引中写入的格式,如 YYYY.MM.dd。如果今天的日期是 2015 年 12 月 30 日,那么 <accountdetail-{now-2d{YYYY.MM.dd}}> 将返回 accountdetail-2015.12.28。
Expression |
Resolves to |
<accountdetail-{now-d}> |
accountdetail-2015.12.29 |
<accountdetail-{now-M}> |
accountdetail-2015.11.30 |
<accountdetail-{now{YYYY.MM}}> |
accountdetail-2015.12 |
现在,我们将了解 Elasticsearch 中一些可用于以指定格式获取响应的常用选项。
Pretty Results
只需追加 URL 查询参数(即 pretty = true)即可获得格式良好的 JSON 对象中的响应。
POST /schools/_search?pretty = true
Response
……………………..
{
"_index" : "schools", "_type" : "school", "_id" : "1", "_score" : 1.0,
"_source":{
"name":"Central School", "description":"CBSE Affiliation",
"street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
"location": [31.8955385, 76.8380405], "fees":2000,
"tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
}
}
………………….