8

私は、graylog2 で Elasticsearch を選択したため、非常に悪い週を過ごしています。Python を使用して ES のデータに対してクエリを実行しようとしています。

クライアントをフォローしてみました。

  1. ESClient - 非常に奇妙な結果です。維持されていないと思います。query_body は効果がなく、すべての結果が返されます。
  2. Pyes - 判読不能、文書化されていません。ソースを閲覧しましたが、単純なクエリを実行する方法がわかりません。おそらく私はそれほど頭が良くありません。ベース クエリを json 形式で実行し、Python オブジェクト/イテレータを使用して結果を分析することもできます。しかし、パイズはそれを容易にしません。
  3. Elasticutils - 別のドキュメントがありますが、完全なサンプルはありません。コードが添付された次のエラーが表示されます。この S() を使用して正しいホストに接続する方法さえわかりませんか?

    es = get_es(ホスト=ホスト、デフォルトインデックス=[インデックス])

    basic_s = S().indexes(INDEX).doctypes(DOCTYPE).values_dict()

結果:

 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でロードしています。それがうまくいくことを願っていますが、カールがelasticsearchから100万件のメッセージをダウンロードするのはうまくいかないかもしれません.

4

6 に答える 6

8

I have found rawes to be quite usable: https://github.com/humangeo/rawes

It's a rather low-level interface but I have found it to be much less awkward to work with than the high-level ones. It also supports the Thrift RPC if you're into that.

于 2012-09-11T00:32:12.300 に答える
7

ホストを明示的に設定すると、そのエラーが解決されました。

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

于 2012-11-13T23:54:53.150 に答える
7

正直なところ、すべてを CURL で処理できたのが一番幸運でした。ES には非常に多くの異なるメソッド、フィルター、およびクエリがあり、さまざまな「ラッパー」がすべての機能を再作成するのに苦労しています。私の見解では、これはデータベースに ORM を使用することに似ています...使いやすさで得られるものは、柔軟性/生の力で失われます。

ただし、ES のほとんどのラッパーはそれほど使いやすいものではありません。

しばらく CURL を試してみて、それがあなたをどのように扱うか見てみたいと思います。外部の JSON フォーマッターを使用して JSON を確認したり、メーリング リストで例を探したり、JSON を使用する場合はドキュメントを確認したりできます。

于 2012-08-03T15:01:53.783 に答える
4

FWIW、PYES ドキュメントはこちら: http://packages.python.org/pyes/index.html

使用法: http://packages.python.org/pyes/manual/usage.html

于 2012-08-06T22:12:46.503 に答える
3

ElasticSearchは最近(2013 年 9 月)、公式の Python クライアントelasticsearch-py (PyPI の Elasticsearch、githubも同様)をリリースしました。これは、公式の ElasticSearch API へのかなり直接的なマッピングであると想定されています。まだ使用していませんが、有望に見えます。少なくとも公式ドキュメントと一致します!

編集: 私たちはそれを使い始めました。とても満足しています。ElasticSearch の API は非常にクリーンで、elasticsearch-py がそれを維持しています。一般に、作業とデバッグがより簡単になり、適切なログが記録されます。

于 2014-02-10T19:20:44.670 に答える
2

ElasticUtils にはサンプル コードがあります: http://elasticutils.readthedocs.org/en/latest/sampleprogram1.html

ドキュメントに必要なものが他にある場合は、質問してください。

于 2012-08-06T19:14:28.837 に答える