要在Elasticsearch中实现多个索引的检索,需要使用多路搜索(multi-search)API。多路搜索允许同时在多个索引中执行一个或多个搜索请求,返回一个结果集。
以下是一个使用多路搜索进行多个索引检索的示例:
GET /twitter,instagram/_msearch
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{}
{"query" : {"match" : {"user" : "johndoe"}}, "from" : 0, "size" : 10}
上述请求会同时在名为“twitter”和“instagram”的两个索引中进行两个搜索请求。第一个搜索请求是一个匹配所有文档的搜索;第二个搜索请求是一个匹配“user”字段中包含“johndoe”的文档的搜索。
多路搜索请求由多个JSON对象组成。每个JSON对象都表示一个单独的搜索请求,以空行分隔。第一个空行表示请求头和请求体之间的分隔符。
多路搜索API的响应结果是一个JSON对象,包含每个搜索请求的响应结果。例如,如果上述请求在“twitter”和“instagram”索引中均匹配到了文档,响应结果可能是这样的:
{
"responses" : [
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "twitter",
"_type": "_doc",
"_id": "1",
"_score": 1,
"_source": {
"text": "Hello world",
"user": "johndoe"
}
},
{
"_index": "instagram",
"_type": "_doc",
"_id": "2",
"_score": 1,
"_source": {
"caption": "Sunset in Bali",
"user": "janedoe"
}
}
]
}
},
{
// 第二个搜索请求的响应结果
}
]
}
响应结果的responses
数组包含了每个搜索请求的结果。每个结果都包含了匹配到的文档以及其他元数据,如匹配得分、索引名称和文档ID等。