我正在尝试使用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)
答案 0 :(得分:3)
并发搜索的数量受搜索线程池的限制。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html
用于计数/搜索操作。 线程池类型的大小为int((#available_processors * 3)/ 2)+ 1,queue_size为1000。
这意味着如果你有单个处理器,那么你将有2个并发搜索,其余的请求将进入队列,并在线程再次可用时进行处理。