抱歉交叉发布。以下问题也发布在Elastic Search的谷歌小组。
简而言之,我试图找出为什么在对包含大约1.5毫安记录的ES索引进行搜索时无法获得最佳性能。
目前,我可以在2秒内获得大约500-1000次搜索。我认为这应该是更快的数量级。目前我还没有使用节俭。
以下是我检查效果的方法。
使用0.19.1版本的pyes(从github尝试了stable和dev版本) 使用0.13.8版本的请求
conn = ES(['localhost:9201'],timeout=20,bulk_size=1000)
loop_start = time.clock()
q1 = TermQuery("tax_name","cellvibrio")
for x in xrange(1000000):
if x % 1000 == 0 and x > 0:
loop_check_point = time.clock()
print 'took %s secs to search %d records' % (loop_check_point-loop_start,x)
results = conn.search(query=q1)
if results:
for r in results:
pass
# print len(results)
else:
pass
感谢您提供的任何帮助,以帮助我扩大搜索范围。
谢谢!
答案 0 :(得分:2)
这不只是并发问题吗?
您按顺序执行所有查询。因此,查询必须在下一个查询进入之前完成。如果你有一个1ms的RTT到服务器,这将限制你每秒1000个请求。
尝试并行运行脚本的几个实例,看看你有什么样的性能。
答案 1 :(得分:1)
使用染料有很多方法可以改善它。
这两件事带来了很多表现。 这有你的缺点 必须使用方法来访问dicts而不是点缀版本(“result.facets.attribute.term”而不是你必须使用像“result.facets ['attribute'] ['term']”或“result.facets”这样的东西。 .get('attribute',{})。get('term',None)“)
我是通过扩展ES类并替换“_send_request”函数来完成的。