2016-07-07 9 views
0

ネイティブクエリを作成していますが、親フィールド内に保持されている特定のフィールドのみを返したいとします。私は、REST APIの_sourceに相当するQueryBuilderまたはNativeSearchQueryBuilderを探していると思います。ここでは、コード例を示します。弾性検索ネイティブクエリの特定のフィールドのみを返します。Java api

NativeSearchQueryBuilder sb = new NativeSearchQueryBuilder() 
.withIndices("myIndex") 
.withTypes("myType") 
.withQuery(QueryBuilders.queryStringQuery("parent.field2:Foo*")); 
.withFields("parent.field1"); 

は、私は、これはFooのようなparent.field2 *を持つオブジェクトに関連付けられているだけparent.field1のリストを返すように期待したいです。しかし、それは何も返しません。

ありがとうございました!

+0

これはリストを返しません。これは単にビルダーを作成します。どのようにこれから結果を取得していますか?そのコードも共有してください。 – Richa

+0

Richa、右、私はこの部分だけを含んでいました。私は、結果の取り出しが返されたフィールドと無関係であると考えました。つまり、すべてがクエリに含まれています。私はビルダにクエリを作成し、それを弾性テンプレートのqueryForListメソッドに渡します。 – DragonMoon

+0

だから、あなたが手に入れようとしているリストが空であると言っています。これはクエリが何も返さなかったためかもしれません。 – Richa

答えて

0

調査の結果、NativeSearchQueryBuilderの回答が見つかりました。私はバネデータ弾性検索の古いバージョンを使用していたので、このメソッドを見ることができませんでした:withSourceFilter。これを行う方法は次のとおりです。

NativeSearchQueryBuilder sb = new NativeSearchQueryBuilder() 
.withIndices("myIndex") 
.withTypes("myType") 
.withQuery(QueryBuilders.queryStringQuery("parent.field2:Foo*")); 
.withSourceFilter(new FetchSourceFilter(<String array of includes>, null)); 

FetchSourceFilterは、2つの引数、includeのString配列、およびexcludesの1つの配列をとります。私の例では、新しいString [] {"parent.field1"}のような配列をFetchSourceFilterに渡し、これをwithSourceFilterに渡します。上記の検索はFoo *のようにparent.field1とparent.field2のリストを返します(ビルドして実行した後)。

私がアップグレードしたバージョンは、spring-data-elasticsearch 2.0.2でした。

関連する問題