我正在使用Elasticsearch的{{3}}通过multi search运行查询列表。它似乎工作......主要是。问题是如果我发送200个查询,它返回100个结果(没有错误)。我已尝试运行甚至20个查询,仍然获得10个结果。由于某种原因,似乎总是只返回一半的查询。这也意味着我不知道结果与哪个查询相关。
查询全部单独工作但需要太长时间。在文档中没有提到响应可能不包含相同数量的查询,所以我不知道该去哪里。我已经进入代码,因为python库将让我验证所有查询是否正在发送,它似乎按预期工作。
感谢您提供任何帮助或推动正确方向!
编辑: 这是我使用的查询示例。
{
"filter":{
"and":[
{
"not":{
"term":{
"uuid":"60507f9e-01c1-11e5-a369-34363bd16ec4"
}
}
},
{
"term":{
"brand_id":22212
}
}
]
},
"query":{
"bool":{
"minimum_should_match":1,
"should":[
{
"match":{
"name":{
"query":"spork",
"boost":3
}
}
},
{
"match":{
"categories":{
"slop":10,
"type":"phrase",
"query":"household plates, bowls, cups & flatware"
}
}
}
],
"must_not":[
],
"must":[
{
"match":{
"name_analyzed":{
"boost":4,
"query":"spork",
"type":"phrase",
"slop":15
}
}
}
]
}
}
}
我根据python elasticsearch文档创建了一个包含许多查询的列表,我希望运行并执行它们,如下所示:
elasticsearch.msearch(list_of_search_queries)
答案 0 :(得分:13)
呼!这很烦人。
因此,搜索和msearch之间的警告是,elasticsearch期望每个查询有两行。第一行表示索引(如果已经指定,则可以留空),第二行是您的实际查询。
因此,在创建查询列表时,我只是在它之前附加{}:
list_of_queries = []
for thing in list_of_things:
list_of_queries.append({})
list_of_queries.append(thing.get_query())
然后它有效!