我试图返回多个"水桶"在一个HTTP请求中来自Elasticsearch的结果。
我正在使用_msearch API。
我使用以下查询:
POST /_msearch
{"index" : "[INDEXNAME]", "type":"post"}
{"query" : {"match" : {"post_type":"team-member"}}, "from" : 0, "size" : 10}
{"index" : "[INDEXNAME]", "type": "post"}
{"query" : {"match" : {"post_type": "article"}}, "from" : 0, "size" : 10}
查询执行时没有错误,但结果只返回一个对象,它似乎应该是两个(一个用于10个团队成员,一个用于10个文章):
{
"responses": [
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 4,
"successful": 4,
"failed": 0
},
"hits": {
"total": 191,
"max_score": 3.825032,
"hits": [
{...}
]
}
}, // second query should be here, no?
]
}
我的查询构造是错误的,还是我误解了它应该如何工作?
答案 0 :(得分:2)
_msearch
请求的格式必须遵循 bulk API format。它必须看起来像这样:
header\n
body\n
header\n
body\n
标题部分包括要搜索的索引/索引,要搜索的可选(映射)类型,search_type
,preference
和routing
。正文包含典型的搜索主体请求(包括query
,aggregations
,from
,size
等。
注意:最后一行数据必须以换行符\n
结尾。
请确保您的查询遵循此格式(来自您的代码示例,具体取决于环境,因为您在POST /_msearch
之后添加了两个新行,您的查询可能会或可能不会;您只应添加一条新线)。如果responses
数组只有一个结果,那么,在你的情况下,最后一个查询被丢弃 - 再次检查它的格式。
答案 1 :(得分:1)
我实际上没有发现任何问题,但您应该检查"批量API",它类似。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html