All Products
Search
Document Center

Tablestore:Filter pasca-kueri

Last Updated:Nov 29, 2025

Filter pasca-kueri (Filter) adalah fitur Tablestore Search Index yang menerapkan filter tambahan pada hasil kueri. Fitur ini memungkinkan Anda mengontrol secara manual Pengoptimal kueri internal dan memaksa kondisi kueri tertentu dijalankan pada tahap akhir. Penggunaan fitur ini secara tepat dapat meningkatkan performa kueri secara signifikan.

Catatan

Untuk menggunakan fitur ini, hubungi dukungan teknis Tablestore untuk mengaktifkannya.

Arsitektur fitur

Filter pasca-kueri didasarkan pada arsitektur kueri berlapis:

  • SearchRequest: Kontainer tingkat atas untuk sebuah kueri. Berisi nama tabel, nama indeks, dan konfigurasi kueri spesifik.

  • SearchQuery: Konfigurasi kueri inti, mencakup kondisi kueri utama (Query) dan filter kueri opsional (SearchFilter).

  • Query: Kondisi kueri utama. Mendukung semua tipe kueri dan tipe data Search Index serta digunakan untuk pengambilan data awal.

  • SearchFilter: Filter sekunder. Berisi kondisi filter untuk penyaringan detail halus terhadap hasil kueri utama.

Batasan

  • Filter pasca-kueri harus digunakan bersama kueri search index. Tipe kueri yang didukung adalah TermQuery, TermsQuery, RangeQuery, ExistsQuery, dan BoolQuery.

  • Untuk BoolQuery, klausa mustQueries, mustNotQueries, dan shouldQueries didukung, tetapi klausa filterQueries tidak didukung.

  • Penyaringan hanya didukung untuk bidang bertipe Keyword, Long, dan Double yang memiliki properti enableSortAndAgg diaktifkan.

  • Filter pasca-kueri tidak mendukung pengaturan Bobot.

Prasyarat

Deskripsi metode

func (tableStoreClient *TableStoreClient) Search(request *SearchRequest) (*SearchResponse, error)

Parameter untuk filter kueri dalam SearchQuery

  • Query (Wajib) Query: Kondisi kueri utama. Mendukung semua tipe kueri Search Index. Berisi parameter berikut:

    Nama

    Tipe data

    Deskripsi

    Type (Wajib)

    QueryType

    Tipe kueri. Semua tipe kueri dari Search API didukung. Jangan gunakan MatchAllQuery.

    Query (Wajib)

    bytes

    Kondisi kueri.

  • SearchFilter (Opsional) SearchFilter: Konfigurasi filter sekunder. Melakukan penyaringan detail halus terhadap hasil kueri utama. Berisi parameter berikut:

    • Query (Wajib) Query: Kondisi kueri filter. Hanya mendukung tipe kueri tertentu. Berisi parameter berikut:

      Nama

      Tipe data

      Deskripsi

      Type (Wajib)

      QueryType

      Tipe kueri. Hanya TermQuery, TermsQuery, RangeQuery, ExistsQuery, dan BoolQuery yang terdiri dari tipe-tipe kueri tersebut yang didukung.

      Query (Wajib)

      bytes

      Kondisi kueri.

Kode contoh

Contoh ini menunjukkan cara menggunakan filter pasca-kueri. Kueri utama mencocokkan data di mana bidang col_keyword bernilai "value", lalu menerapkan kondisi filter untuk memilih catatan di mana nilai bidang col_long berada dalam rentang antara 1 dan 10.

func queryFilterExample(client *tablestore.TableStoreClient) {
	// [Wajib] Ganti dengan nama tabel Anda.
	tableName := "<TABLE_NAME>"
	// [Wajib] Ganti dengan nama search index Anda.
	indexName := "<SEARCH_INDEX_NAME>"

	// Buat kueri utama: TermsQuery untuk pencocokan eksak.
	termsQuery := &search.TermsQuery{
		FieldName: "col_keyword",
		Terms:     []interface{}{"value"},
	}

	// Buat kondisi filter: RangeQuery di mana nilai bidang col_long berada dalam rentang (1, 10).
	rangeQuery := &search.RangeQuery{
		FieldName: "col_long",
		From:      int64(1),  // Mengecualikan 1.
		To:        int64(10), // Mengecualikan 10.
		// Untuk menyertakan batas, atur secara eksplisit IncludeLower/IncludeUpper. Nilai default di Go SDK adalah true.
		// Metode setFrom/setTo di Java SDK secara default mengecualikan batas, dan perilaku Go SDK konsisten dengannya.
	}

	// Susun filter.
	searchFilter := &search.SearchFilter{
		Query: rangeQuery,
	}

	// Gabungkan menjadi SearchQuery lengkap.
	searchQuery := search.NewSearchQuery()
	searchQuery.SetQuery(termsQuery)
	searchQuery.SetSearchFilter(searchFilter)

	// Buat permintaan.
	searchRequest := &tablestore.SearchRequest{}
	searchRequest.SetTableName(tableName)
	searchRequest.SetIndexName(indexName)
	searchRequest.SetSearchQuery(searchQuery)

	// Atur kolom yang akan dikembalikan: kembalikan semua kolom dari search index.
	columnsToGet := &tablestore.ColumnsToGet{
		ReturnAllFromIndex: true,
	}
	searchRequest.SetColumnsToGet(columnsToGet)

	resp, err := client.Search(searchRequest)
	if err != nil {
		log.Printf("Kueri gagal: %v", err)
		return
	}

	for _, row := range resp.Rows {
		fmt.Printf("Baris: %+v\n", row.PrimaryKey)
	}
}
  • Anda dapat mengonfigurasi kueri untuk mengembalikan kolom tertentu atau semua kolom.

     columnsToGet := &tablestore.ColumnsToGet{
        // Tentukan kolom.
        Columns: []string{"col_long", "col_keyword"},
        // Atau, kembalikan semua kolom.
        //ReturnAll: true,
    }
    searchRequest.SetColumnsToGet(columnsToGet)
  • Untuk menghitung jumlah total baris yang sesuai, Anda dapat mengaktifkan fitur totalCount lalu mengambil jumlah tersebut dari respons.

     // Aktifkan totalCount di searchQuery.
    searchQuery.SetGetTotalCount(true)
     // Cetak jumlah total baris yang sesuai dari respons.
    fmt.Printf("Jumlah Total (sesuai): %d\n", resp.TotalCount)