Elasticsearch 简明教程
Elasticsearch - Search APIs
此 API 用于在 Elasticsearch 中搜索内容。用户可以通过使用查询字符串作为参数发送 GET 请求或在 POST 请求的信息主体中发布查询来进行搜索。基本上,所有搜索 API 都是多索引多类型。
Multi-Index
Elasticsearch 允许我们搜索所有索引或某些特定索引中存在的文档。例如,如果我们需要搜索名称中包含中心的所有文档,我们可以像这里所示的那样进行操作:
GET /_all/_search?q=city:paprola
在运行上述代码后,我们会得到以下响应:
{
"took" : 33,
"timed_out" : false,
"_shards" : {
"total" : 7,
"successful" : 7,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.9808292,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 0.9808292,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
]
}
}
URI Search
在搜索操作中可以使用统一资源标识符传入许多参数:
S.No |
Parameter & Description |
1 |
Q 此参数用于指定查询字符串。 |
2 |
lenient 此参数用于指定查询字符串。只要将此参数设置为 true,就可以忽略基于格式的错误。默认情况下为 false。 |
3 |
fields 此参数用于指定查询字符串。 |
4 |
sort 我们可以使用此参数获得已排序的结果,此参数的可能值为 fieldName,fieldName:asc/fieldname:desc |
5 |
timeout 我们可以使用此参数限制搜索时间,且响应仅包含该指定时间段内的点击量。默认情况下,没有超时。 |
6 |
terminate_after 我们可以将响应限制为每个分片的特定数量的文档,达到该数量时,查询会提前终止。默认情况下,没有 terminate_after。 |
7 |
from 从要返回的点击量的索引开始。默认为 0。 |
8 |
size 表示要返回的点击量数。默认为 10。 |
Request Body Search
我们还可以在请求正文中使用查询 DSL 指定查询,在之前的章节中已经给出了许多示例。这里给出了一个这样的示例:
POST /schools/_search
{
"query":{
"query_string":{
"query":"up"
}
}
}
在运行上述代码后,我们会得到以下响应:
{
"took" : 11,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.47000363,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 0.47000363,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
}
}