用于python的Elasticsearch客户端,没有解决方案

时间:2012-08-03 13:47:00

标签: python elasticsearch pyes

我在选择带有graylog2的elasticsearch时遇到了非常糟糕的一周。我正在尝试使用Python对ES中的数据运行查询。

我试过跟随客户。

  1. ESClient - 非常奇怪的结果,我认为它没有维护,query_body没有效果它返回所有结果。
  2. Pyes - 不可读,无证。我浏览了一些资源,无法弄清楚如何运行一个简单的查询,也许我不是那么聪明。我甚至可以用json格式运行基本查询,然后只使用Python对象/迭代器对结果进行分析。但Pyes并不容易。
  3. Elasticutils - 另一个记录,但没有完整的样本。附加代码时出现以下错误。我甚至不知道它如何使用这个S()连接到正确的主机?

    es = get_es(hosts = HOST,default_indexes = [INDEX])

    basic_s = S()。索引(INDEX).doctypes(DOCTYPE).values_dict()

  4. 结果:

     print basic_s.query(message__text="login/delete")
      File "/usr/lib/python2.7/site-packages/elasticutils/__init__.py", line 223, in __repr__
        data = list(self)[:REPR_OUTPUT_SIZE + 1]
      File "/usr/lib/python2.7/site-packages/elasticutils/__init__.py", line 623, in __iter__
        return iter(self._do_search())
      File "/usr/lib/python2.7/site-packages/elasticutils/__init__.py", line 573, in _do_search
        hits = self.raw()
      File "/usr/lib/python2.7/site-packages/elasticutils/__init__.py", line 615, in raw
        hits = es.search(qs, self.get_indexes(), self.get_doctypes())
      File "/usr/lib/python2.7/site-packages/pyes/es.py", line 841, in search
        return self._query_call("_search", body, indexes, doc_types, **query_params)
      File "/usr/lib/python2.7/site-packages/pyes/es.py", line 251, in _query_call
        response = self._send_request('GET', path, body, querystring_args)
      File "/usr/lib/python2.7/site-packages/pyes/es.py", line 208, in _send_request
        response = self.connection.execute(request)
      File "/usr/lib/python2.7/site-packages/pyes/connection_http.py", line 167, in _client_call
        return getattr(conn.client, attr)(*args, **kwargs)
      File "/usr/lib/python2.7/site-packages/pyes/connection_http.py", line 59, in execute
        response = self.client.urlopen(Method._VALUES_TO_NAMES[request.method], uri, body=request.body, headers=request.headers)
      File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 294, in urlopen
        return self.urlopen(method, url, body, headers, retries-1, redirect) # Try again
      File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 294, in urlopen
        return self.urlopen(method, url, body, headers, retries-1, redirect) # Try again
      File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 294, in urlopen
        return self.urlopen(method, url, body, headers, retries-1, redirect) # Try again
      File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 294, in urlopen
        return self.urlopen(method, url, body, headers, retries-1, redirect) # Try again
      File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 255, in urlopen
        raise MaxRetryError("Max retries exceeded for url: %s" % url)
    pyes.urllib3.connectionpool.MaxRetryError: Max retries exceeded for url: /graylog2/message/_search
    

    我希望这些好项目的开发者能够提供一些完整的例子。即使看着消息来源我也完全失去了。

    有没有任何解决方案,有帮助我使用elasticsearch和python,或者我应该放弃所有这些并支付一个漂亮的splunk帐户并结束这种痛苦。

    我正在继续使用curl,下载整个json结果并且json加载它。希望有用,虽然curl从elasticsearch下载100万条消息可能不会发生。

6 个答案:

答案 0 :(得分:8)

我发现rawes非常实用: https://github.com/humangeo/rawes

这是一个相当低级别的界面,但我发现它与高级别界面相比不那么尴尬。 如果您正在使用它,它还支持Thrift RPC。

答案 1 :(得分:7)

老实说,我只有CURLing一切都运气好。 ES有许多不同的方法,过滤器和查询,各种“包装器”很难重新创建所有功能。在我看来,它类似于使用ORM进行数据库...你在易用性方面获得的东西会失去灵活性/原始力量。

除了ES的大多数包装器都不是那么容易使用。

我会暂时尝试一下CURL,看看这对你有什么影响。您可以使用外部JSON格式化程序检查您的JSON,邮件列表以查找示例,如果您使用JSON,文档也可以。

答案 2 :(得分:7)

明确设置主机解决了我的错误:

basic_s = S() .es(hosts=HOST, default_indexes=[INDEX])

答案 3 :(得分:4)

答案 4 :(得分:3)

ElasticSearch recently(2013年9月)发布了一个官方的Python客户端elasticsearch-py(关于PyPI的弹性搜索,也在github上),这应该是对官方ElasticSearch的一个相当直接的映射API。我还没有使用它,但看起来很有希望,至少它会与官方文档相匹配!

编辑:我们开始使用它,我对它非常满意。 ElasticSearch的API非常干净,而elasticsearch-py维护它。一般来说,更容易使用和调试,还有不错的日志记录。

答案 5 :(得分:2)

ElasticUtils有示例代码:http://elasticutils.readthedocs.org/en/latest/sampleprogram1.html

如果文档中还有其他内容,请询问。