繁体   English   中英

使用pyes进行弹性搜索

[英]elastic search performance using pyes

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

简而言之,我试图找出为什么在包含约1.5密耳记录的ES索引上进行搜索时无法获得最佳性能。

目前,我能够在2秒内获得大约500-1000次搜索。 我认为这应该快几个数量级。 另外,目前我不使用节俭。

这是我检查性能的方法。

使用pyes的0.19.1版本(从github尝试了稳定版本和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

感谢您可以提供的任何帮助,以帮助我扩大搜索范围。

谢谢!

这不仅仅是并发问题吗?

您正在按顺序执行所有查询。 因此,查询必须先完成,然后才能进行下一个查询。 如果您对服务器的RTT为1毫秒,这将限制您每秒1000个请求。

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

有一些严格的方法可以通过使用pyes来改善它。

  • 首先,尝试摆脱DottedDict类/对象,该类/对象用于根据您得到的每个结果从每个json / dict生成对象。
  • 第二个将json编码器切换到ujson。

这两件事带来了很多性能。 这样做的缺点是,您必须使用访问字典的方式,而不是点缀的版本(“ result.facets.attribute.term”,而必须使用“ result.facets ['attribute'] ['term']或“ result.facets.get('attribute',{})。get('term',None)”)

我是通过扩展ES类并替换“ _send_request”函数来完成此操作的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM