Elasticseach Multisearch仅返回1组结果

时间:2016-04-11 13:08:56

标签: elasticsearch

我试图返回多个"水桶"在一个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?
        ]
    }

我的查询构造是错误的,还是我误解了它应该如何工作?

2 个答案:

答案 0 :(得分:2)

_msearch请求的格式必须遵循 bulk API format。它必须看起来像这样:

header\n
body\n
header\n
body\n

标题部分包括要搜索的索引/索引,要搜索的可选(映射)类型,search_typepreferencerouting。正文包含典型的搜索主体请求(包括queryaggregationsfromsize等。

注意:最后一行数据必须以换行符\n结尾。

请确保您的查询遵循此格式(来自您的代码示例,具体取决于环境,因为您在POST /_msearch之后添加了两个新行,您的查询可能会或可能不会;您只应添加一条新线)。如果responses数组只有一个结果,那么,在你的情况下,最后一个查询被丢弃 - 再次检查它的格式。

答案 1 :(得分:1)

我实际上没有发现任何问题,但您应该检查"批量API",它类似。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html