2016-04-01 2 views
1

シンプルなような短い質問がありますが、これまでの回答は見つかりませんでした。Elasticsearch与えられたフィールドの最後のドキュメントをGETします。

私はElasticsearchノード、日付フィールドに与えられた最後の文書で検索したいと思います。しかし、私は最後の文書を持っていますが、特定のフィールドを含む文書の場合にのみ必要です。例えば

、のは、私がフィールド "promotionCode" を含む最後の購入を取得したいとしましょう:

問合せ:store1が私のインデックス、購入ある

http://elasticsearch:9200/store1/purchase/_search?q=vendor:Marie&size=1&sort=date:desc 

ドキュメントタイプ。

今度は、私は私のElasticSearchにこれら二つの文書を持っているとしましょう:

"hits": [ 
     { 
     "_index": "store1", 
     "_type": "purchase", 
     "_id": "1", 
     "_score": 1, 
     "_source": { 
      "date": "2016-03-16T12:53:16.000Z", 
      "vendor": "Marie", 
      "promotionCode": "XYZ123" 
     } 
     }, 
     { 
     "_index": "store1", 
     "_type": "purchase", 
     "_id": "2", 
     "_score": 1, 
     "_source": { 
      "date": "2016-03-18T12:53:16.000Z", 
      "vendor": "Marie" 
     } 
     } 
] 

上記のクエリは、ID 2の文書を取得しますが、私は私の結果に任意のフィールド「promotionCode」を持っていません。

特定のフィールドを含む最後のドキュメントを取得したい場合はどうすればよいですか?

私は「フィールド」フィルタを探求しますが、フィールドが含まれていない場合にのみ、ボイド文書を返送し、私はソースフィルタリングについて読んしかし、私が欲しいものをやっているかわからない...

どうもありがとうどんなヒントでも!

答えて

3

ヨは、このクエリを試すことができます。

{ 
    "query": { 
     "term": { "vendor": "Marie" } 
    }, 
    "filter": { 
     "bool": { 
      "must_not": { "missing": { "field": "promotionCode" } } 
     } 
    }, 
    "sort": { "date" : "desc" }, 
    "size": 1 
} 
+0

私はこのクエリを試しました:http:// elasticsearch:9200/store1/purchase/_search? しかし、それは私に100を最も返しました。 'promotionsCode'が含まれていなくても、ドキュメントを再読します。私はそれを正しくしていますか? – Alex

+0

本文にJSONをPOSTリクエストする必要があります。ブラウザーで表示結果が必要な場合は、chromeに "postman"拡張子を使用できます。 – skal88

+0

ああ、それは私が思ったものです、それはPOSTリクエストです...私はすでにPostmanを持っています(それは素晴らしいRESTクライアントです!)しかし、私はGET動詞でそれを達成できると思いました。 – Alex

0

あなたはそれが役に立てば幸いExists Query

GET /store1/purchase/_search?q=vendor:Marie&size=1&sort=date:desc 
{ 

     "query": { 
    "exists" : { 
     "field" : "promotionCode" 
     } 
    } 

} 

を使用することができます!

+0

を、私はこのクエリを試してみました: 'ます。http:// elasticsearch:9200/store1 /購入/ _search Q =ベンダー:?マリー&サイズ= 100&かわいい=ソート真&= sendDate :desc&exists = promotionCode' フィールドプロモーションコードの有無に関係なく、最新の100件のドキュメントがすべて返されます。 '存在= {"フィールド ":" promotionCode "}'これはクエリでもうまく動作します..多分私はそれを間違ってやっています – Alex

+0

POSTでも私はこの1つを作れませんでした...私はESを持っています2.2 – Alex

+0

実行しているクエリは何ですか?正確なクエリを指定してください。 – Richa

関連する問題