私はネストされた型を持っているマッピングを持っています。ネストされたオブジェクトは通常複数のオブジェクトを含んでいるので、メインオブジェクト全体が取り出されると配列になります。検索要求の「フィールド」部分を使用すると、メインオブジェクトのフィールドと、ネストされたオブジェクトのフィールド(1つしか存在しない場合は配列)を取得できますが、明らかにネストされたオブジェクト配列全体は取得できません。オブジェクト全体を取得する(フィールドを省略する)以外にこれを行う方法はありますか?Elasticsearchでは、オブジェクト全体がなくてもネストしたフィールド全体を返すにはどうすればよいですか?
たとえば、次のように一般的に
{ "properties: { "f1": {"type": "string"}, "f2": {"type": "string"}, ... "n": { "type": "nested", "properties": { "n1": {"type": "string"}, "n2": {"type": "string"}, ... } } } }
、n個の配列になりますが、n1はこのクエリが動作するすべてのエントリ
のために設定されますが、理由の一部で行方不明N1年代のすることはできません配列内のオブジェクトは、有用ではない:
{"query": {"nested": {"path": "n", "query": {"match": {"n.n1","something"}}}}, "fields": ["f1", "n.n1"]}
これは(「フィールド[n]はないありません葉のフィールド」)が、私は本当に欲しいものです:
{"query": {"nested": {"path": "n", "query": {"match": {"n.n1","something"}}}}, "fields": ["f1", "n"]}
しかし、これはありません、()の配列のnを含む全オブジェクトを取得犠牲に:
{"query": {"nested": {"path": "n", "query": {"match": {"n.n1","something"}}}}}
いくつかのクエリ構文がありますが、全体の配列n(およびメインオブジェクトの文字列フィールドの少なくとも1つ)を与えるでしょうか?
残念ながら、名前が示唆するように、それはちょうどヒットを与える。私は、例の中の* whole *配列nを含むトップレベルオブジェクト全体のフィールドのサブセットの後に、nがマッチするものがあれば*です。私はこれを得ることができますが、特定の "フィールド"を求めないことによってのみ、興味のないデータをかなり多く取得しています。 – frankieandshadow
"source:false"を設定する必要はなく、親から必要な他のすべてのフィールドに "fields:"フラグを使用することはできます。次に、ネストされたクエリをすべて一致として残します。 – Mic987
しかし、それはちょうど私にヒットしたnを与え、同じオブジェクト内の他のものを省略しないのですか? – frankieandshadow