Używam sprężynowych danych, elastycznych wyszukań i elastycznych wyszukań, aby wyszukiwać dokumenty. Chciałbym zagnieżdżone zapytania w zagnieżdżonych dokumentach.Wiosenne dane Elastic Search z zagnieżdżonymi polami i mapowaniem
mam to w Java:
@Document(indexName = "as", type = "a", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1")
class A {
@Id
private String Id;
@Field(type = String, index = analyzed, store = true)
private String field1;
// ... Many more Fields.
@NestedField(type = FieldType.Object, index = analyzed, store = true, dotSuffix = "accounts")
private List<B> bs;
// ... getters and setters
}
I
class B { // some normal pojo }
Kiedy niech wiosenne dane zrobić mapowanie, otrzymuję:
"a": {
"properties": {
"bs": {
"properties": {
"someBProperty": {
"type": "string"
},
"BId": {
"type": "string"
}
}
},
"id": { ... },
...
}
Kiedy próbuję zapytaj dokument, dostaję problemy z klasycznymi wewnętrznymi a zagnieżdżonymi dokumentami i nie rozpoznaję zagnieżdżonego elementu.
Gdy próbuję zaktualizować mapowanie, aby użyć zagnieżdżonego dokumentu, otrzymam "nie można zmienić z nieprzenoszonego na zagnieżdżony".
Czy powinienem przekazać dane sprężynowe w jakiś sposób, że @NestedField => type: "nested" do mapowania? Czy istnieje sposób na dodanie niestandardowego mapowania do danych sprężyn podczas tworzenia mapowania indeksu &?
Również jestem inicjowanie indeksów poprzez:
elasticsearchTemplate.deleteIndex(A.class);
elasticsearchTemplate.createIndex(A.class);
elasticsearchTemplate.putMapping(A.class);
elasticsearchTemplate.refresh(A.class,true);
A potem zapytań za pomocą repozytorium wiosna-data:
QueryBuilder builder = QueryBuilders.nestedQuery("bs", QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("as.field1", "A1")).must(QueryBuilders.matchQuery("as.field2", "B1")));
Iterable<DenormalizedRelationshipDocument> res = aRepository.search(builder);
Tu res ma 0 elementem iterowalny ale poprzez REST otrzymuję błąd w zapytaniu zagnieżdżonym nie jest obsługiwany (ponieważ nie mam go w odwzorowaniu).
wreszcie
Does Wiosna-Data-ElasticSearch obsługuje zagnieżdżone mapowania za pośrednictwem ES QueryBuilders API? Kiedy powinienem wykonać to mapowanie?
można zasugerować sposób wykorzystujący @query adnotacji dla tego samego. –
Czy możesz zaproponować metodę wyłączenia _source przy użyciu danych sprężynowych? – Sachin
SearchQuery searchQuery = new NativeSearchQueryBuilder(). WithFields() metoda, jeśli chcesz tylko określone pola. –