最近、AWS Elasticsearchサービス(Elasticsearch 1.5.2で使用)からElastic Cloud(現在Elasticsearch 5.1.2を使用)に移行しました。うれしかったですが、その変更に伴い、Elasticsearchと新しいAPIの新しいバージョンが登場しました。物事を要求する新しい方法を念頭に置いて奮闘する。以前は、「Elasticsearch Request Body」からコピー/ペーストすることは可能でしたが、いくつかのことを調整し、elasticsearch.Elasticsearch.search()を実行して、私が期待するものを得ることができました。KibanaからのElasticsearchリクエストをelasticsearch-dslに翻訳
ここに私のElasticsearchリクエストボディ(簡潔にするため、Kibanaは通常、挿入という異質なものの一部を削除)Kibanaからだ:それはように見えるので、
{
"size": 500,
"sort": [
{
"Time.ISO8601": {
"order": "desc",
"unmapped_type": "boolean"
}
}
],
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "Message\\ ID: 2003",
"analyze_wildcard": true
}
},
{
"range": {
"Time.ISO8601": {
"gte": 1484355455678,
"lte": 1484359055678,
"format": "epoch_millis"
}
}
}
],
"must_not": []
}
},
"stored_fields": [
"*"
],
"script_fields": {},
}
は、今私は、それを行うにはelasticsearch-DSLを使用したいです(elasticsearch-pyを使用する代わりに)推奨される方法です。私は上記をelasticsearch-dslにどのように変換しますか?
は、ここで私がこれまで持っているものです。上記のように書かれて
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q
client = Elasticsearch(
hosts=['HASH.REGION.aws.found.io/elasticsearch'],
use_ssl=True,
port=443,
http_auth=('USER','PASS')
)
s = Search(using=client, index="emp*")
s = s.query("query_string", query="Message\ ID:2003", analyze_wildcards=True)
s = s.query("range", **{"Time.ISO8601": {"gte": 1484355455678, "lte": 1484359055678, "format": "epoch_millis"}})
s = s.sort("Time.ISO8601")
response = s.execute()
for hit in response:
print '%s %s' % (hit['Time']['ISO8601'], hit['Message ID'])
私のコードは、私が期待するものを私に与えていません。 "Message \ ID:2003"と一致しないものを含む結果を取得する。また、要求されたTime.ISO8601の範囲外のものを与える。
elasticsearch-dslとES 5.1.2のやり方が全く新しいので、私はたくさんのことを学ぶことができます。私は間違って何をしていますか?助けを前にありがとう!