elasticsearch,pyes,Python,elasticsearch,Pyes" /> elasticsearch,pyes,Python,elasticsearch,Pyes" />

Python 使用pyes的弹性搜索性能

Python 使用pyes的弹性搜索性能,python,elasticsearch,pyes,Python,elasticsearch,Pyes,很抱歉交叉发布。以下问题也发布在Elastic Search的google group上 简言之,我试图找出为什么在搜索包含150万条记录的ES索引时无法获得最佳性能 目前,我能在2秒钟内完成大约500-1000次搜索。我认为这应该是更快的数量级。目前我也不使用节俭 下面是我如何检查性能的 使用0.19.1版本的pyes(从github试用了stable和dev版本) 使用0.13.8版本的请求 conn = ES(['localhost:9201'],timeout=20,bulk_size=

很抱歉交叉发布。以下问题也发布在Elastic Search的google group上

简言之,我试图找出为什么在搜索包含150万条记录的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
感谢您为我扩展搜索提供的帮助


谢谢

这不只是一个并发问题吗

您正在按顺序执行所有查询。因此,查询必须在下一个查询开始之前完成。如果服务器有1ms RTT,这将限制每秒1000个请求


尝试并行运行脚本的几个实例,看看您获得了什么样的性能。

这不只是并发性的问题吗

您正在按顺序执行所有查询。因此,查询必须在下一个查询开始之前完成。如果服务器有1ms RTT,这将限制每秒1000个请求


尝试并行运行脚本的几个实例,看看您的性能如何。

使用pye有几种方法可以提高性能

  • 首先,尝试摆脱DottedDict类/对象,该类/对象用于为获得的每个结果从每个json/dict生成一个对象
  • 第二,将json编码器切换到ujson
这两件事带来了很多成绩。 这样做的缺点是 必须使用访问dicts的方法,而不是虚线版本(“result.facets.attribute.term”,而必须使用类似“result.facets['attribute']['term']”或“result.facets.get('attribute',{}).get('term',None)”)


我通过扩展ES类并替换“\u send\u request”函数来实现这一点。

使用pyes有几种方法可以改进这一点

  • 首先,尝试摆脱DottedDict类/对象,该类/对象用于为获得的每个结果从每个json/dict生成一个对象
  • 第二,将json编码器切换到ujson
这两件事带来了很多成绩。 这样做的缺点是 必须使用访问dicts的方法,而不是虚线版本(“result.facets.attribute.term”,而必须使用类似“result.facets['attribute']['term']”或“result.facets.get('attribute',{}).get('term',None)”)

我通过扩展ES类并替换“\u send\u request”函数来实现这一点