Elasticsearch多次搜索未返回正确数量的结果

kev*_*son 6 python elasticsearch

我正在使用Elasticsearch的多搜索来通过python库运行查询列表.它似乎工作......主要是.问题是如果我发送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
                  }
               }
            }
         ]
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我根据python elasticsearch文档创建了一个包含许多查询的列表,我希望按照这些查询运行并执行它们:

elasticsearch.msearch(list_of_search_queries)
Run Code Online (Sandbox Code Playgroud)

kev*_*son 14

呼!这很烦人.

所以搜索和msearch之间的警告是elasticsearch期望每个查询两行.第一行表示索引(如果已经指定,则可以留空),第二行是实际查询.

因此,在创建查询列表时,我只需在它之前附加{},如下所示:

list_of_queries = []
for thing in list_of_things:
    list_of_queries.append({})
    list_of_queries.append(thing.get_query())
Run Code Online (Sandbox Code Playgroud)

然后它的作品!