Tablestore SDK for Python kullanarak arama dizini sonuçlarının sırasını kontrol edebilir ve offset veya next_token ile sonuçları sayfalara bölebilirsiniz.
Ön koşullar
Tablestore SDK for Python paketini yükleyin ve bir istemci başlatın.
Açıklama
Arama dizinleri, dizin ön sıralaması ve sorgu zamanı sıralamayı destekler. Bir arama dizini oluştururken varsayılan sıralamayı belirtmek için index_sort parametresini kullanın. index_sort belirtilmezse satırlar birincil anahtara göre sıralanır. Dizin ön sıralaması yalnızca PrimaryKeySort ve FieldSort türlerini destekler; Nested alan içeren dizinlerde desteklenmez. Oluşturma işleminden sonra şemayı dinamik olarak güncelleyerek dizin ön sıralamasını değiştirebilirsiniz. Sorgu zamanında sıralamayı belirtmek için SearchQuery.sort parametresini kullanın; bu parametreyle ScoreSort, PrimaryKeySort, FieldSort veya GeoDistanceSort belirtebilir ya da birden fazla sıralayıcıyı liste sırasına göre birleştirebilirsiniz. Birincil anahtarlar haricinde, sıralama alanlarının dizin oluşturulurken sıralama ve toplama özelliği etkinleştirilmiş olmalıdır.
|
|
|
|
|
|
|
|
|
Aşağıdaki örnek, önce score alanına göre azalan sonra da birincil anahtara göre artan sırada ilk 10 satırı döndürür.
sort = Sort([
FieldSort("score", SortOrder.DESC),
PrimaryKeySort(SortOrder.ASC),
])
response = client.search(
"example_table",
"example_index",
SearchQuery(MatchAllQuery(), sort=sort, limit=10),
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.rows)
Parametreler
Arama isteği
search yöntemi aşağıdaki parametreleri içerir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sorgu yapılandırması
search_query parametresi SearchQuery türündedir ve aşağıdaki sıralama ile sayfalama parametrelerini içerir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sıralama yapılandırması
search_query.sort parametresi Sort türündedir ve aşağıdaki parametreyi içerir.
|
|
|
|
|
|
|
|
Alaka puanına göre sıralama
search_query.sort.sorters[] parametresi ScoreSort türündeyse satırlar alaka puanına göre sıralanır. ScoreSort aşağıdaki parametreyi içerir.
|
|
|
|
|
|
|
|
Birincil anahtara göre sıralama
search_query.sort.sorters[] parametresi PrimaryKeySort türündeyse satırlar birincil anahtara göre sıralanır. PrimaryKeySort aşağıdaki parametreyi içerir.
|
|
|
|
|
|
|
|
Alana göre sıralama
search_query.sort.sorters[] parametresi FieldSort türündeyse satırlar alan değerine göre sıralanır. FieldSort aşağıdaki parametreleri içerir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nested filtresi
search_query.sort.sorters[].nested_filter parametresi NestedFilter türündedir, FieldSort veya GeoDistanceSort içinde kullanılabilir ve aşağıdaki parametreleri içerir.
|
|
|
|
|
|
|
|
|
|
|
|
Coğrafi mesafeye göre sıralama
search_query.sort.sorters[] parametresi GeoDistanceSort türündeyse satırlar coğrafi bir nokta ile hedef noktalar arasındaki mesafeye göre sıralanır. GeoDistanceSort aşağıdaki parametreleri içerir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş sütunları
columns_to_get parametresi ColumnsToGet türündedir ve aşağıdaki parametreleri içerir.
|
|
|
|
|
|
|
|
|
|
|
|
Yanıt
search yöntemi SearchResponse nesnesini döndürür. Aşağıdaki tabloda çekirdek alanlar açıklanmıştır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Boş bir next_token değeri, sorgunun deterministik bir sıralama düzenine sahip olmadığını da gösterebilir. total_count mevcut sayfadaki satır sayısı değil, eşleşen toplam satır sayısını temsil eder.
Tuple uyumlu yanıt
Tablestore SDK for Python 5.2.0 sürümünden itibaren arama API'leri tuple yerine yanıt nesneleri döndürür. 5.1.0 ve önceki sürümler doğrudan tuple döndürür. 5.2.1 ve sonraki sürümlerde, önceki sürümlerle uyumlu bir tuple elde etmek için SearchResponse.v1_response() yöntemini çağırabilirsiniz. Yeni kodlarda, yanıt alanları genişletildiğinde açma hatalarını önlemek için SearchResponse özniteliklerine doğrudan erişin.
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()
Örnekler
Coğrafi mesafeye göre sıralama
Aşağıdaki örnek, location alanı ile 30.25,120.16 koordinatları arasındaki küresel mesafeye göre sonuçları en yakından en uzağa doğru döndürür.
sort = Sort([
GeoDistanceSort(
"location",
["30.25,120.16"],
sort_order=SortOrder.ASC,
sort_mode=SortMode.MIN,
geo_distance_type=GeoDistanceType.ARC,
)
])
response = client.search(
"example_table",
"example_index",
SearchQuery(MatchAllQuery(), sort=sort, limit=10),
)
print(response.rows)
next_token kullanarak sayfalama
İlk istekte sıralama düzenini belirtin. Sonraki isteklerde, belirteç boşalana kadar yalnızca önceki yanıttaki next_token değerini ve aynı sorgu koşulunu iletin.
query = MatchAllQuery()
response = client.search(
"example_table",
"example_index",
SearchQuery(query, sort=Sort([PrimaryKeySort()]), limit=100),
)
all_rows = list(response.rows)
while response.next_token:
response = client.search(
"example_table",
"example_index",
SearchQuery(query, next_token=response.next_token, limit=100),
)
all_rows.extend(response.rows)
print(len(all_rows))
next_token kullanarak sayfalama yaparken offset parametresini belirtmeyin ve sayfalar doğrudan atlanamaz. Geriye doğru hareket etmek için her sayfa için kullanılan belirteci önbelleğe alın ve hedef sayfanın belirteciyle yeniden sorgulama yapın. Nested alan içeren bir arama dizininde dizin ön sıralaması bulunmaz. İlk istekte sort parametresini açıkça belirtin, aksi takdirde sunucu next_token döndürmez.