全部产品
Search
文档中心

Tablestore:Sorot hasil query

更新时间:Jul 02, 2025

Ketika Anda mengirimkan permintaan query, Anda dapat mengaktifkan fitur sorot. Dalam hal ini, kata kunci dalam hasil yang memenuhi kondisi query akan disorot. Hanya bidang Teks yang mendukung fitur sorot.

Prasyarat

Catatan penggunaan

  • Jika Anda mengaktifkan fitur sorot dalam query cocok atau query frasa cocok, string query dalam hasil query mungkin disorot menggunakan beberapa tag pembuka (preTag) dan tag penutup (postTag).

  • Jika metode tokenisasi untuk bidang Teks adalah tokenisasi berbasis unit semantik maksimum (MaxWord), fitur sorot tidak didukung ketika Anda melakukan query frasa cocok pada bidang Teks.

  • Jika Anda ingin mengembalikan beberapa fragmen, string query dalam fragmen tersebut mungkin terpecah. Dalam hal ini, string query mungkin tidak disorot.

Parameter

Parameter

Deskripsi

highlightEncoder

Metode pengkodean fragmen teks yang disorot. Nilai valid:

  • PLAIN (default): menampilkan fragmen teks yang disorot tanpa perlu pengkodean.

  • HTML: melakukan pengkodean HTML pada fragmen teks yang disorot. Setelah pengkodean HTML selesai, < dikonversi menjadi &lt;, > menjadi &gt;, " menjadi &quot;, ' menjadi &#x27;, dan / menjadi &#x2F;. Jika Anda ingin menampilkan halaman web, kami sarankan Anda menggunakan format HTML.

fieldHighlightParams

Pengaturan sorot untuk bidang. Anda hanya dapat mengaktifkan fitur sorot untuk bidang yang berisi kata kunci yang ditentukan dalam objek SearchQuery.

HighlightParameter

numberOfFragments

Jumlah maksimum fragmen teks yang disorot untuk dikembalikan. Kami sarankan Anda mengatur nilainya menjadi 1.

fragmentSize

Panjang setiap fragmen teks untuk dikembalikan. Nilai default: 100.

Penting

Panjang aktual dari fragmen teks yang dikembalikan mungkin berbeda dari nilai parameter ini.

preTag

Tag pembuka yang digunakan untuk menyorot kata kunci query. Contoh: <em> dan <b>. Nilai default: <em>. Anda dapat menentukan tag pembuka kustom berdasarkan kebutuhan bisnis Anda. Parameter preTag mendukung set karakter berikut: < > " ' /, a-z, A-Z, dan 0-9.

postTag

Tag penutup yang digunakan untuk menyorot kata kunci query. Contoh: </em> dan </b>. Nilai default: <em>. Anda dapat menentukan tag penutup kustom berdasarkan kebutuhan bisnis Anda. Parameter postTag mendukung set karakter berikut: < > " ' /, a-z, A-Z, dan 0-9.

highlightFragmentOrder

Aturan pengurutan fragmen teks yang disorot untuk dikembalikan.

  • TEXT_SEQUENCE (default): Fragmen teks yang disorot diurutkan berdasarkan urutan kemunculannya dalam teks asli.

  • SCORE: Fragmen teks yang disorot diurutkan berdasarkan skor kata kunci yang cocok.

Contoh

Berikut ini adalah contoh kode sampel tentang cara menggunakan fitur MatchQuery untuk menanyakan data yang cocok dengan hangzhou shanghai dari bidang Col_Text dan menyorot kata kunci dalam hasil query. Dalam contoh ini, bidang Col_Text bertipe Teks.

/**
 * Aktifkan fitur sorot untuk kata kunci dalam objek MatchQuery. 
 */
public static void matchQueryWithHighlighting(SyncClient client) {
    SearchRequest searchRequest = SearchRequest.newBuilder()
            .tableName("<TABLE_NAME>")
            .indexName("<SEARCH_INDEX_NAME>")
            .returnAllColumnsFromIndex(true)
            .searchQuery(SearchQuery.newBuilder()
                    .limit(5)
                    .query(QueryBuilders.bool()
                            .should(QueryBuilders.match("Col_Text", "hangzhou shanghai")))
                    .highlight(Highlight.newBuilder()
                            .addFieldHighlightParam("Col_Text", HighlightParameter.newBuilder()
                                    .highlightFragmentOrder(HighlightFragmentOrder.TEXT_SEQUENCE)
                                    .preTag("")
                                    .build())
                            .build())
                    .build())
            .build();
    SearchResponse resp = client.search(searchRequest);

    // Tampilkan hasil query yang disorot. Saat Anda menanyakan bidang non-Nested, atur parameter prefix ke null. 
    printSearchHit(resp.getSearchHits(), "");
}

/**
 * Tampilkan konten yang memenuhi kondisi query. 
 * @param searchHits searchHits
 * Jika output menggunakan struktur Nested dengan @param prefix, tambahkan prefix untuk menampilkan informasi hierarki. 
 */
private static void printSearchHit(List<SearchHit> searchHits, String prefix) {
    for (SearchHit searchHit : searchHits) {
        if (searchHit.getScore() != null) {
            System.out.printf("%s Skor: %s\n", prefix, searchHit.getScore());
        }

        if (searchHit.getOffset() != null) {
            System.out.printf("%s Offset: %s\n", prefix, searchHit.getOffset());
        }

        if (searchHit.getRow() != null) {
            System.out.printf("%s Baris: %s\n", prefix, searchHit.getRow().toString());
        }

        // Tampilkan fragmen yang disorot untuk setiap bidang. 
        if (searchHit.getHighlightResultItem() != null) {
            System.out.printf("%s Sorot: \n", prefix);
            StringBuilder strBuilder = new StringBuilder();
            for (Map.Entry<String, HighlightField> entry : searchHit.getHighlightResultItem().getHighlightFields().entrySet()) {
                strBuilder.append(entry.getKey()).append(":").append("[");
                strBuilder.append(StringUtils.join(",", entry.getValue().getFragments())).append("]\n");
            }
            System.out.printf("%s   %s", prefix, strBuilder);
        }

        System.out.println();
    }
}

Referensi

  • Untuk informasi tentang fitur highlight, lihat Highlight Keywords.

  • Untuk informasi tentang cara menggunakan fitur highlight saat Anda membuat kueri pada Nested fields, lihat Nested Query.