Tüm Ürünler
Search
Belge Merkezi

Tablestore:Nested query

Son Güncelleme:Oct 02, 2026

Tablestore SDK for Java ile yapılan nested sorgu, alt satır sınırlarını koruyarak Nested alanındaki verileri eşleştirir ve eşleşen alt satırları döndürebilir.

Ön koşullar

Tablestore SDK for Java öğesini yükleyin ve bir istemci başlatın.

Özellik açıklaması

Nested sorgu, Nested alanındaki alt satırları sorgular. Nested alanındaki her alt satır, kendi alanları arasındaki ilişkileri bağımsız olarak korur. Bir Nested alanının alt alanlarını doğrudan sorgulayamazsınız. Bunun yerine alt sorguyu bir NestedQuery nesnesine sarmalısınız.

NestedQuery.path parametresi, sorgulanacak nested alanın yolunu belirtir. Alt sorgudaki alan adları tam yollar kullanılarak tanımlanmalıdır. Alt sorgu herhangi bir Query türünde olabilir. Çok düzeyli bir nested alanı sorgulamak için path parametresini hedef nested alanın tam yoluna doğrudan ayarlayabilir veya her düzeyi sorgulamak üzere NestedQuery nesnelerini iç içe yerleştirebilirsiniz.

Birden fazla koşulun aynı alt satır tarafından karşılanıp karşılanmayacağı, NestedQuery ve BoolQuery bileşimlerinin nasıl yapılandırıldığına bağlıdır:

  • Aynı alt satırın birden fazla koşulu karşılamasını zorunlu kılmak için alt koşulları içeren bir BoolQuery nesnesini tek bir NestedQuery içinde alt sorgu olarak ayarlayın.

  • Farklı alt satırların koşulları ayrı ayrı karşılamasına izin vermek için her koşul için birer NestedQuery oluşturun ve bu nested sorguları dış bir BoolQuery içinde birleştirin.

Bir nested sorgu yapmak için search yöntemini çağırın. Sorgu koşulunda nested alan yolunu, alt sorguyu ve puanlama modunu belirtin.

SearchResponse search(SearchRequest request)

Aşağıdaki örnek, items nested alanındaki alt satırlardan items.keyword alanı tablestore değerine eşit olanları sorgular. Sorgu en fazla 10 satır ve toplam eşleşme sayısını döndürür.

String tableName = "example_table";
String indexName = "example_index";

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("items.keyword");
termQuery.setTerm(ColumnValue.fromString("tablestore"));

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(termQuery);
nestedQuery.setScoreMode(ScoreMode.None);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());

Parametreler

Arama isteği

request parametresi aşağıdaki parametreleri içeren bir SearchRequest nesnesidir.


Ad


Tür


Açıklama


tableName (gerekli)


String


Veri tablosunun adı.


indexName (gerekli)


String


Arama dizininin adı.


searchQuery (gerekli)


SearchQuery


Sorgu koşulu ve genel sorgu ayarları.


columnsToGet (isteğe bağlı)


SearchRequest.ColumnsToGet


Döndürülecek sütunlar. Bu parametre yapılandırılmazsa yalnızca birincil anahtar sütunları döndürülür.


timeoutInMillisecond (isteğe bağlı)


int


Milisaniye cinsinden istek düzeyindeki sorgu zaman aşımı. Varsayılan değer -1 olup ayrı bir sorgu zaman aşımı yapılandırmaz.


routingValues (isteğe bağlı)


List<PrimaryKey>


Özel yönlendirme alanlarına karşılık gelen birincil anahtar değerleri. Özel yönlendirme yapılandırılmamışsa bu parametreyi ayarlamayın.

Sorgu ayarları

request.searchQuery parametresi aşağıdaki parametreleri içeren bir SearchQuery nesnesidir.


Ad


Tür


Açıklama


query (gerekli)


Query


Sorgu koşulu. Nested sorgu için bu parametreyi bir NestedQuery nesnesine ayarlayın.


offset (isteğe bağlı)


Integer


Sorgunun başlangıç konumu.


limit (isteğe bağlı)


Integer


Döndürülecek maksimum satır sayısı. Satır döndürmemek için bu parametreyi 0 olarak ayarlayın.


collapse (isteğe bağlı)


Collapse


Belirtilen bir alana göre sonuçların yinelenenlerini kaldıran alan daraltma ayarları. Yapılandırma ayrıntıları için bkz. Sorgu sonuçlarını daraltma.


sort (isteğe bağlı)


Sort


Sonuç sıralama düzeni. Yapılandırma ayrıntıları için bkz. Sonuçları sıralama ve sayfalandırma.


trackTotalCount (isteğe bağlı)


int


Sayılacak beklenen maksimum eşleşen satır sayısı. Varsayılan değer TRACK_TOTAL_COUNT_DISABLED olup saymayı devre dışı bırakır. Tüm eşleşen satırları saymak için bu parametreyi TRACK_TOTAL_COUNT olarak ayarlayın. Daha küçük bir değer sorgu performansını artırır.


filter (isteğe bağlı)


SearchFilter


query sonuçlarına uygulanan bir filtre.


aggregationList (isteğe bağlı)


List<Aggregation>


Toplama ayarları. Yapılandırma ayrıntıları için bkz. Toplama.


groupByList (isteğe bağlı)


List<GroupBy>


Gruplama ayarları. Yapılandırma ayrıntıları için bkz. Toplama.


token (isteğe bağlı)


byte[]


Sayfalandırma belirteci. Satırları okumaya devam etmek için bu parametreyi önceki yanıttaki nextToken değerine ayarlayın. token ayarlandığında SDK, belirtecin zaten sıralama koşullarını içerdiğinden sort parametresini temizler.

Nested sorgu koşulu

request.searchQuery.query parametresi aşağıdaki parametreleri içeren bir NestedQuery nesnesidir.


Ad


Tür


Açıklama


path (gerekli)


String


Sorgulanacak nested alanın yolu. Çok düzeyli bir nested alan için bu parametreyi hedef nested alanın tam yoluna, örneğin items.details değerine ayarlayın.


query (gerekli)


Query


path altındaki alt satırlarda yürütülecek sorgu koşulu. Koşul herhangi bir Query türünde olabilir. Alt alanı tam yoluyla, örneğin items.keyword şeklinde belirtin.


scoreMode (gerekli)


ScoreMode


Birden fazla alt satır eşleştiğinde üst satır için puanlama modu. None alt satırlar için alaka puanlamasını devre dışı bırakır. Avg, Max, Min ve Total ise alt satır puanlarının ortalamasını, maksimumunu, minimumunu ve toplamını kullanır.


innerHits (isteğe bağlı)


InnerHits


Eşleşen alt satırları döndürme, sıralama, sayfalandırma ve vurgulama ayarları. Bu parametreyi atlarsanız eşleşen alt satırlara ilişkin ayrıntılar döndürülmez.


weight (isteğe bağlı)


float


Sorgu ağırlığı. Varsayılan değer 1.0 olup değer pozitif bir kayan noktalı sayı olmalıdır. Daha büyük bir değer eşleşen satırların puanlarını artırır ancak hangi satırların eşleştiğini değiştirmez.

Alt satır döndürme ayarları

request.searchQuery.query.innerHits parametresi aşağıdaki parametreleri içeren bir InnerHits nesnesidir.


Ad


Tür


Açıklama


sort (isteğe bağlı)


Sort


Eşleşen alt satırların sıralama düzeni. ScoreSort ve DocSort kullanabilirsiniz. FieldSort desteklenmez.


offset (isteğe bağlı)


Integer


Eşleşen alt satırların döndürülmeye başlanacağı konum.


limit (isteğe bağlı)


Integer


Döndürülecek maksimum eşleşen alt satır sayısı. Varsayılan değer 3 değeridir.


highlight (isteğe bağlı)


Highlight


Eşleşen alt satırlar için vurgulama ayarları. Vurgulamayı destekleyen alanlar ve parametreler hakkında bilgi için bkz. Özet ve vurgulama.

Döndürülen sütunlar

request.columnsToGet parametresi aşağıdaki parametreleri içeren bir SearchRequest.ColumnsToGet nesnesidir.


Ad


Tür


Açıklama


columns (isteğe bağlı)


List<String>


Döndürülecek nitelik sütunları. Bu parametreyi yalnızca returnAll ve returnAllFromIndex değerlerinin her ikisi de false ise ayarlayın. Bu parametreyi atlarsanız yalnızca birincil anahtar sütunları döndürülür.


returnAll (isteğe bağlı)


boolean


Veri tablosundan tüm nitelik sütunlarının döndürülüp döndürülmeyeceğini belirtir. Varsayılan değer false değeridir.


returnAllFromIndex (isteğe bağlı)


boolean


Tüm dizine alınmış nitelik sütunlarının döndürülüp döndürülmeyeceğini belirtir. Varsayılan değer false değeridir. returnAll ve returnAllFromIndex parametrelerinin her ikisini birden true olarak ayarlamayın.

Dönüş değerleri

Arama yanıtı

search yöntemi bir SearchResponse nesnesi döndürür. Aşağıdaki tabloda temel alanlar açıklanmaktadır.


Ad


Tür


Açıklama


totalCount


long


Eşleşen satır sayısı. Değeri almak için getTotalCount() yöntemini çağırın. Döndürülen değer trackTotalCount ayarına bağlıdır.


rows


List<Row>


Bu sorgu tarafından döndürülen satırlar. Değeri almak için getRows() yöntemini çağırın. Satır sayısı limit değerini aşmaz.


searchHits


List<SearchHit>


Sorgu eşleşmeleri. Değeri almak için getSearchHits() yöntemini çağırın. innerHits yapılandırılmışsa eşleşen alt satırları bu alandan okuyun.


nextToken


byte[]


Sonraki sayfa belirteci. Değeri almak için getNextToken() yöntemini çağırın. Değer null değilse satırları okumaya devam etmek için sonraki istekte bunu token olarak ayarlayın.


isAllSuccess


boolean


Tüm dizin bölümlerinin başarıyla sorgulanıp sorgulanmadığını gösterir. Değeri almak için isAllSuccess() yöntemini çağırın. Değer false ise yanıt kısmi sonuçlar içerir ve totalCount değeri gerçek eşleşen satır sayısından az olabilir.

Arama eşleşmesi

response.searchHits[] dizisi aşağıdaki temel alanları içeren bir SearchHit nesnesinden oluşur.


Ad


Tür


Açıklama


row


Row


Eşleşen satır veya alt satır. Değeri almak için getRow() yöntemini çağırın.


score


Double


Alaka puanı. Değeri almak için getScore() yöntemini çağırın.


offset


Integer


Orijinal dizideki nested alt satırın konumu. Değeri almak için getOffset() yöntemini çağırın. Bu alan bir üst satır eşleşmesinde boş olabilir.


highlightResultItem


HighlightResultItem


Vurgulama sonucu. Değeri almak için getHighlightResultItem() yöntemini çağırın.


searchInnerHits


Map<String, SearchInnerHit>


Nested alan yoluna göre gruplandırılmış eşleşen alt satırlar. Haritayı almak için getSearchInnerHits() yöntemini veya belirli bir yol için sonucu almak üzere getSearchInnerHitByPath(path) yöntemini çağırın.

Nested eşleşmesi

response.searchHits[].searchInnerHits aşağıdaki alanlara sahip SearchInnerHit değerlerini içerir.


Ad


Tür


Açıklama


path


String


Nested alan yolu. Değeri almak için getPath() yöntemini çağırın.


subSearchHits


List<SearchHit>


Eşleşen alt satırlar. Değeri almak için getSubSearchHits() yöntemini çağırın. Çok düzeyli bir nested sorguda, bir alt satır eşleşmesindeki searchInnerHits bir sonraki düzeyden eşleşen satırları içerebilir.

Senaryo örnekleri

Çok düzeyli bir nested alanı sorgulama

Çok düzeyli bir nested alanı sorgulamak için path parametresini hedef nested alanın tam yoluna ayarlayın ve alt sorguda tam alt alan yolunu belirtin. Aşağıdaki örnek, items.details.name değerinin beta olduğu satırları sorgular.

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("items.details.name");
termQuery.setTerm(ColumnValue.fromString("beta"));

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items.details");
nestedQuery.setQuery(termQuery);
nestedQuery.setScoreMode(ScoreMode.None);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);

Aynı alt satırın birden fazla koşulu karşılamasını zorunlu kılma

Birden fazla alt koşulu içeren bir BoolQuery nesnesini tek bir NestedQuery içinde alt sorgu olarak ayarlayın. Aşağıdaki örnek, items içindeki aynı alt satırın items.keyword değerinin tablestore olmasını ve items.number alanının mevcut olmasını şart koşar.

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("items.keyword");
termQuery.setTerm(ColumnValue.fromString("tablestore"));

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("items.number");

BoolQuery childQuery = new BoolQuery();
childQuery.setMustQueries(Arrays.asList(termQuery, existsQuery));

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(childQuery);
nestedQuery.setScoreMode(ScoreMode.None);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);

Farklı alt satırların birden fazla koşulu karşılamasına izin verme

Her koşul için birer NestedQuery oluşturun ve bu nested sorguları dış bir BoolQuery içinde birleştirin. Aşağıdaki örnek, items.keyword değerinin tablestore olması ile items.number alanının mevcut olmasının farklı alt satırlar tarafından karşılanmasına olanak tanır.

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("items.keyword");
termQuery.setTerm(ColumnValue.fromString("tablestore"));
NestedQuery termNestedQuery = new NestedQuery();
termNestedQuery.setPath("items");
termNestedQuery.setQuery(termQuery);
termNestedQuery.setScoreMode(ScoreMode.None);

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("items.number");
NestedQuery existsNestedQuery = new NestedQuery();
existsNestedQuery.setPath("items");
existsNestedQuery.setQuery(existsQuery);
existsNestedQuery.setScoreMode(ScoreMode.None);

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustQueries(
        Arrays.asList(termNestedQuery, existsNestedQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Eşleşen alt satırları döndürme ve vurgulama

Eşleşen alt satırların sayısını, sıralama düzenini ve vurgulama ayarlarını yapılandırmak için InnerHits kullanın. Aşağıdaki örnek, items.description alanı hangzhou içeren alt satırları sorgular ve vurgulanmış sonuçları döndürür.

MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("items.description");
matchQuery.setText("hangzhou");

HighlightParameter parameter = new HighlightParameter();
parameter.setPreTag("<em>");
parameter.setPostTag("</em>");
Highlight highlight = new Highlight();
highlight.addFieldHighlightParam("items.description", parameter);

InnerHits innerHits = new InnerHits();
innerHits.setLimit(3);
innerHits.setSort(new Sort(Arrays.asList(
        new ScoreSort(), new DocSort(SortOrder.ASC))));
innerHits.setHighlight(highlight);

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(matchQuery);
nestedQuery.setScoreMode(ScoreMode.None);
nestedQuery.setInnerHits(innerHits);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);

Çok düzeyli bir nested sorguda, eşleşen alt satırların döndürülmesi veya vurgulanması gereken her NestedQuery düzeyinde innerHits yapılandırın.