問題タブ [elasticsearch-py]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2006 参照

python - xより大きいIDフィールドを照会するElasticsearchの方法

Elasticsearch の 10k の壁を超えるために複数回クエリを実行して、結果にページネーションを適用しようとしています。Elasticsearch の結果は複数のクエリで異なる可能性があるため、生成された ID を使用して次の結果を取得したいと考えています。

たとえば、1000 件の結果を返すクエリを実行するとします。次に、1000 番目の結果の ID 値を取得し、次のようなクエリを実行します: match : ID {{1000thID}}

このようにして、1001 から 2000 までの結果を取得したいと考えています。その後 2001 年から 3000 年まで、というように続きます。

現在、Python 用の Elasticsearch DSL を使用して、次のようなドメイン名を照会しています。

上記の要件に一致するようにこのコードを再構築するにはどうすればよいですか。('一致',_ID > ID_変数)

0 投票する
1 に答える
1257 参照

elasticsearch - ネストされたオブジェクトに新しいフィールドを追加する

エラスティックサーチ 2.3.3

更新APIを使用して既存のドキュメントに新しいフィールドを追加できません。どうすれば追加できますか?

以下に、ドキュメント更新用のElasticsearch Python APIスクリプトを示します。更新クエリが変数に割り当てられqueryます。

ネストされたオブジェクトを使用します。ネストされていないフィールドを更新しても問題はありません。

Elasticsearch ドキュメントの一部:

Elasticsearch マッピングの一部:

更新の実行後に次のエラーが表示されます。

0 投票する
3 に答える
6083 参照

python - ソースフィルターを使用したelasticsearch-py検索

Elasticsearch-py (es バージョンは 2.3) を使用しており、俳優、監督、ジャンル、プロット、タイトル、年などのマッピングを使用して、インデックス内のすべてのドキュメントから「タイトル」フィールドのみを返したいと考えています。

私は現在試しmessages = es.search(index="movies", _source=['hits.hits.title'])ていますが、結果の応答は次のとおりです。

{u'hits': {u'hits': [{u'_score': 1.0, u'_type': u'movie', u'_id': u'tt0116996', u'_source': {}, u'_index': u'movies'}, {u'_score': 1.0, u'_type': u'movie', u'_id': u'1', u'_source': {}, u'_index': u'movies'}], u'total': 2, u'max_score': 1.0}, u'_shards': {u'successful': 1, u'failed': 0, u'total': 1}, u'took': 2, u'timed_out': False}

さまざまなバージョンのフィルター パスとソース フィールド リストを試しましたが、うまくいきません。

0 投票する
2 に答える
1615 参照

elasticsearch - elastisearch クライアントでの helpers.scan での filter_path の使用

Elasticsearch で検索操作を行う場合、メタデータを除外して、応答で「_source」のみを返すようにします。次の方法で「検索」を介して同じことを達成できます。

out1 = es.search(index='index.com', filter_path=['hits.hits._id', 'hits.hits._source'])

しかし、スキャンメソッドで同じことをすると、空のリストが返されます:

out2 = helpers.scan(es, query, index='index.com', doc_type='2016-07-27',filter_path= ['hits.hits._source'])

問題は、'scan' メソッドの応答を処理する方法、または値を filter_path に渡す方法にある可能性があります。出力を確認するには、out2 をリストに解析します。

0 投票する
2 に答える
1387 参照

python - elasticsearch-dsl - Python で平均を収集する集計

Elasticsearch-dsl ライブラリを使用しようとしていますが、残念ながら十分に文書化されていません。

次のフィルターがありますが、これは機能します。

最初に、どれだけさかのぼって検索する必要があるかを見つけます。

次に、フィルターを使用して検索を実行します

この後、いくつかの aggs を実行する必要があります。私は次のものを持っていますが、動作しません:

それはただ戻ってきます:

Avg(field='ask')

また、簡単なことだけでなく、楽しい計算を行うためにも必要です。お願いします + (スプレッド / 2)

すなわち

s = s.aggs.bucket('average', 'avg', field='ask + (スプレッド / 2')

誰にもアイデアはありますか?

ここでは、spread を整数型にする必要があります。現在は文字列です。最初に python を使用してインデックスを作成しました。インデックスを削除してやり直してよかったのですが、作成時に Python でフィールド タイプを指定する方法がわかりません。