ElasticSearch中multiSearch的最佳批量查询大小

时间:2016-09-21 15:09:47

标签: python algorithm elasticsearch

我正在尝试使用multisearch查询elasticsearch,但它似乎并没有大大改善时间。

对于约 70k查询,不同bulk_sizes所用的时间为:

对于单次搜索,每次拍摄时间= 2611s

multisearch(bulksize = 1000)拍摄时间= 2400s

multisearch(bulksize = 10)拍摄时间= 2326s

所以,我需要知道

a)这是进行MultiSearch的正确方法吗?

b)多重搜索的最佳批量大小是什么?

这是我的代码:

search_arr = []

        for k in range(i,i+BULK_SIZE):
            search_arr.append({'index':'test'})
            search_arr.append({"query": {"match": {"title": title[k]}}, "size": 5})
        request =''
        for each in search_arr:
            request += '%s \n' %json.dumps(each)

        resp = es.msearch(body=request)

1 个答案:

答案 0 :(得分:3)

并发搜索的数量受搜索线程池的限制。

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html

  

用于计数/搜索操作。   线程池类型的大小为int((#available_processors * 3)/ 2)+ 1,queue_size为1000。

这意味着如果你有单个处理器,那么你将有2个并发搜索,其余的请求将进入队列,并在线程再次可用时进行处理。