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

时间:2015-08-12 23:22:57

标签: python elasticsearch

我正在使用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)

1 个答案:

答案 0 :(得分:13)

呼!这很烦人。

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

因此,在创建查询列表时,我只是在它之前附加{}:

list_of_queries = []
for thing in list_of_things:
    list_of_queries.append({})
    list_of_queries.append(thing.get_query())

然后它有效!