2016-04-04 8 views
0

NativeSearchQueryBuilder.withFields(...)メソッドを使用すると、ネストされたフィールドが返されないようです。ここでSpring Data Elastic SearchネストされたフィールドとNativeSearchQueryBuilder.withFields

は私の親オブジェクトである:

public class Model 
{ 
    @Field(type=FieldType.String, index=FieldIndex.not_analyzed, store=true) 
    private String model; 
    @Field(type=FieldType.String, index=FieldIndex.not_analyzed, store=true) 
    private Set<String> series; 
} 

とクエリ= 529 TotalElementsしかし、各オブジェクトで結果として得られる

NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder(); 
nativeSearchQueryBuilder.withQuery(QueryBuilders.matchAllQuery()); 
nativeSearchQueryBuilder.withFields("models.series"); 
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build(); 
FacetedPage<Inventory> results = inventoryRepository.search(nativeSearchQuery); 

@Document(indexName = "inventory") 
public class Inventory 
{ 
    @Id 
    private String id; 
    @Field(type=FieldType.String) 
    private String name; 
    @Field(type=FieldType.Nested, index=FieldIndex.not_analyzed, store=true) 
    private List<Model> models; 
} 

そしてここでは、ネストされたオブジェクトでありますコンテンツは次のようになります(JSON形式):

{ 
    "id":"d5f82880-15bc-45ed-8abb-ff97d0e45da9", 
    "name": null, 
    "models": null 
} 

私はwithFields(...)の設定を削除した場合、私は戻って取得:

{ 
    "id":"d5f82880-15bc-45ed-8abb-ff97d0e45da9", 
    "name": "Cool Beans", 
    "models": [ 
    { 
     "model" : "foo", 
     "series" : ["bar"] 
    } 
    ] 
} 

私はモデル、models.model、models.series、モデル、シリーズを試してみました。私はwithFieldsがNestedFieldsで作業することができません。

どのような考えですか?

+0

に加えて、それが反応して、' source'を返しません。あなたのレコードの値を取得するために、ヒットには 'fields'だけが存在します。私はあなたが値の源を見ていると思います – Rahul

答えて

0

弾性検索フィールドについての私の理解は間違っていました。 rahulrocは私に謝った。

withFieldsはソースフィルタリングと同じではありません。これは私が

curl localhost:9200/inventory/_search?pretty=true -d ' 
{ 
    "_source" : ["models.series"], 
    "query" : { 
    "match" : {"name" : "cool"} 
    } 
}' 

withFieldsのアプローチは、私が何であったかのために働いて欲しいものである場合には

curl localhost:9200/inventory/_search?pretty=true -d ' 
{ 
    "fields" : ["models.series"], 
    "query" : { 
    "match" : {"name" : "cool"} 
    } 
}' 

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-fields.html

は、だから私は、これを効果的に行うために春データESを言っていますNestedFieldsを追加するまではやっていました。現在使用しているSpring Data ESの実装では、ソースフィルタリングはサポートされていません。クエリで `fields`を指定すると

ソースフィルタリングはちょうど最近、春データES 2.0.0.RC1

関連する問題