Menggunakan pencarian teks lengkap dengan kolom XML

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Anda bisa membuat indeks teks lengkap pada kolom XML yang mengindeks konten nilai XML, tetapi mengabaikan markup XML. Tag elemen digunakan sebagai batas token. Item berikut diindeks:

  • Konten elemen XML.

  • Konten atribut XML dari elemen tingkat atas saja, kecuali nilai tersebut adalah nilai numerik.

Jika memungkinkan, Anda dapat menggabungkan pencarian teks lengkap dengan indeks XML dengan cara berikut:

  1. Pertama, filter nilai XML yang menarik dengan menggunakan pencarian teks lengkap SQL.

  2. Selanjutnya, kueri nilai XML yang menggunakan indeks XML pada kolom XML.

Contoh: Menggabungkan pencarian teks lengkap dengan kueri XML

Setelah indeks teks lengkap dibuat pada kolom XML, kueri berikut memeriksa bahwa nilai XML berisi kata "kustom" dalam judul buku:

SELECT *
FROM   T
WHERE  CONTAINS(xCol,'custom')
AND    xCol.exist('/book/title/text()[contains(.,"custom")]') = 1;

Metode ini contains() menggunakan indeks teks lengkap untuk subset nilai XML yang berisi kata "kustom" di mana saja dalam dokumen. Klausa exist() memastikan bahwa kata "kustom" terjadi dalam judul buku.

Pencarian teks lengkap yang menggunakan contains() dan XQuery contains() memiliki semantik yang berbeda. Yang terakhir adalah kecocokan substring dan yang pertama adalah kecocokan token yang menggunakan stemming. Oleh karena itu, jika pencarian adalah untuk string yang memiliki "jalankan" dalam judul, kecocokan akan mencakup "run", "runs", dan "running", karena teks contains() lengkap dan XQuery contains() terpenuhi. Namun, kueri tidak cocok dengan kata "dapat disesuaikan" dalam judul karena teks contains() lengkap gagal, tetapi XQuery contains() terpenuhi. Umumnya, untuk kecocokan substring murni, klausa teks contains() lengkap harus dihapus.

Selain itu, pencarian teks lengkap menggunakan stemming kata, tetapi XQuery contains() adalah kecocokan harfiah. Perbedaan ini diilustrasikan dalam contoh berikutnya.

Contoh: Pencarian teks lengkap pada nilai XML menggunakan stemming

Pemeriksaan XQuery contains() yang dilakukan dalam contoh sebelumnya umumnya tidak dapat dihilangkan. Pertimbangkan kueri ini:

SELECT *
FROM   T
WHERE  CONTAINS(xCol,'run');

Kata "berjalan" dalam dokumen cocok dengan kondisi pencarian karena stemming. Selain itu, konteks pencarian tidak dicentang dengan menggunakan XQuery.

Saat XML diurai ke dalam kolom relasional dengan menggunakan AXSD yang diindeks teks lengkap, kueri XPath yang terjadi pada tampilan XML tidak melakukan pencarian teks lengkap pada tabel yang mendasarinya.

Baca juga