Cari Kata Yang Dekat dengan Kata Lain dengan NEAR
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Anda dapat menggunakan istilah kedekatan NEAR dalam predikat CONTAINS atau fungsi CONTAINSTABLE untuk mencari kata atau frasa di dekat satu sama lain.
Ringkasan NEAR
NEAR memiliki fitur-fitur berikut:
Anda dapat menentukan jumlah maksimum istilah non-pencarian yang memisahkan istilah pencarian pertama dan terakhir.
Anda dapat mencari kata atau frasa dalam urutan apa pun, atau Anda dapat mencari kata dan frasa dalam urutan tertentu.
Anda dapat menentukan jumlah maksimum istilah non-pencarian, atau jarak maksimum, yang memisahkan istilah pencarian pertama dan terakhir untuk merupakan kecocokan.
Jika Anda menentukan jumlah maksimum istilah, Anda juga dapat menentukan bahwa kecocokan harus berisi istilah pencarian dalam urutan yang ditentukan.
Untuk memenuhi syarat sebagai kecocokan, string teks harus:
Mulailah dengan salah satu istilah pencarian yang ditentukan dan akhiri dengan salah satu istilah pencarian yang ditentukan lainnya.
Berisi semua istilah pencarian yang ditentukan.
Jumlah istilah non-pencarian, termasuk stopword, yang terjadi antara istilah pencarian pertama dan terakhir harus kurang dari atau sama dengan jarak maksimum, jika jarak maksimum ditentukan.
Sintaks NEAR
Sintaks dasar NEAR adalah:
NEAR (
{
*search_term* [ ,...*n* ]
|
(*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]
}
)
Untuk informasi selengkapnya tentang sintaks, lihat CONTAINS (Transact-SQL).
Contoh
Contoh 1
Misalnya, Anda dapat mencari 'John' dalam dua istilah 'Smith', sebagai berikut:
... CONTAINS(column_name, 'NEAR((John, Smith), 2)')
Beberapa contoh string yang cocok adalah "John Jacob Smith
" dan "Smith, John
". String "John Jones knows Fred Smith
" berisi tiga istilah non-pencarian yang mengintervensi, sehingga tidak cocok.
Untuk mengharuskan istilah ditemukan dalam urutan yang ditentukan, Anda akan mengubah istilah kedekatan contoh menjadi NEAR((John, Smith),2, TRUE).
Ini mencari "John
" dalam dua istilah "Smith
" tetapi hanya ketika "John
" mendahului "Smith
". Dalam bahasa yang berbunyi dari kiri ke kanan, seperti bahasa Inggris, contoh string yang cocok adalah "John Jacob Smith
".
Perhatikan bahwa untuk bahasa yang membaca dari kanan ke kiri, seperti Arab atau Ibrani, Mesin Teks Lengkap menerapkan istilah yang ditentukan dalam urutan terbalik. Selain itu, Object Explorer di SQL Server Management Studio secara otomatis membalikkan urutan tampilan kata yang ditentukan dalam bahasa kanan-ke-kiri.
Contoh 2
Contoh berikut mencari Production.Document
tabel AdventureWorks
database sampel untuk semua ringkasan dokumen yang berisi kata "reflektor" dalam dokumen yang sama dengan kata "tanda kurung".
SELECT DocumentNode, Title, DocumentSummary
FROM Production.Document AS DocTable
INNER JOIN CONTAINSTABLE(Production.Document, Document,
'NEAR(bracket, reflector)' ) AS KEY_TBL
ON DocTable.DocumentNode = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 50
ORDER BY KEY_TBL.RANK DESC;
GO
Bagaimana jarak maksimum diukur
Jarak maksimum tertentu, seperti 10 atau 25, menentukan berapa banyak istilah non-pencarian, termasuk stopword, dapat terjadi antara istilah pencarian pertama dan terakhir dalam string tertentu. Misalnya, NEAR((dogs, cats, "hunting mice"), 3)
akan mengembalikan baris berikut, di mana jumlah total istilah non-pencarian adalah tiga (""enjoy
, "but
", dan "avoid
"):
" "Cats
enjoy
hunting mice``, but avoid
dogs``.
Istilah kedekatan yang sama tidak akan mengembalikan baris berikut, karena jarak maksimum terlampaui oleh empat istilah non-pencarian (""enjoy
, "but
", "usually
", dan "avoid
"):
" "Cats
enjoy
hunting mice``, but usually avoid
dogs``.
Gabungkan NEAR dengan istilah lain
Anda dapat menggabungkan NEAR dengan beberapa istilah lain. Anda dapat menggunakan AND (&), OR (|), atau AND NOT (&!) untuk menggabungkan istilah kedekatan kustom dengan istilah kedekatan kustom lainnya, istilah sederhana, atau istilah awalan. Contohnya:
CONTAINS('NEAR((term1, term2),5) AND term3')
CONTAINS('NEAR((term1, term2),5) OR term3')
CONTAINS('NEAR((term1, term2),5) AND NOT term3')
CONTAINS('NEAR((term1, term2),5) AND NEAR((term3, term4),2)')
CONTAINS('NEAR((term1, term2),5) OR NEAR((term3, term4),2, TRUE)')
Contohnya,
CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')
Anda tidak dapat menggabungkan NEAR dengan istilah pembuatan (ISABOUT ...) atau istilah tertimbang (FORMSOF ...).
Info selengkapnya tentang pencarian kedekatan
Kemunculan istilah pencarian yang tumpang tindih
Semua pencarian kedekatan selalu mencari hanya kejadian yang tidak tumpang tindih. Kemunculan tumpang tindih istilah pencarian tidak pernah memenuhi syarat sebagai kecocokan. Misalnya, pertimbangkan istilah kedekatan berikut, yang mencari "
A
" dan "AA
" dalam urutan ini dengan jarak maksimum dua istilah:CONTAINS(column_name, 'NEAR((A,AA), 2, TRUE)')
Kemungkinan kecocokan adalah sebagai "
AAA
", "A.AA
", dan "A..AA
". Baris yang hanya berisi "AA
" tidak akan cocok.Catatan
Anda dapat menentukan istilah yang tumpang tindih, misalnya,
NEAR("mountain bike", "bike trails")
atau(NEAR(comfort*, comfortable), 5)
. Menentukan istilah yang tumpang tindih meningkatkan kompleksitas kueri dengan meningkatkan kemungkinan permutasi kecocokan. Jika Anda menentukan sejumlah besar istilah yang tumpang tindih tersebut, kueri dapat kehabisan sumber daya dan gagal. Jika ini terjadi, sederhanakan kueri dan coba lagi.DEKAT (terlepas dari apakah jarak maksimum ditentukan) menunjukkan jarak logis antara istilah, bukan jarak absolut di antara mereka. Misalnya, istilah dalam frasa atau kalimat yang berbeda dalam paragraf diperlakukan lebih jauh daripada istilah dalam frasa atau kalimat yang sama, terlepas dari kedekatan aktualnya, dengan asumsi bahwa mereka kurang terkait. Demikian juga, istilah dalam paragraf yang berbeda diperlakukan sebagai lebih jauh. Jika kecocokan mencakup akhir kalimat, paragraf, atau bab, kesenjangan yang digunakan untuk memberi peringkat dokumen masing-masing ditingkatkan sebesar 8, 128, atau 1024.
Dampak istilah kedekatan pada peringkat oleh fungsi CONTAINSTABLE
Ketika NEAR digunakan dalam fungsi CONTAINSTABLE, jumlah temuan dalam dokumen relatif terhadap panjangnya serta jarak antara istilah pencarian pertama dan terakhir di setiap temuan memengaruhi peringkat setiap dokumen. Untuk istilah kedekatan generik, jika istilah pencarian yang cocok terpisah dengan >50 istilah logis, peringkat yang dikembalikan pada dokumen adalah 0. Untuk istilah kedekatan kustom yang tidak menentukan bilangan bulat sebagai jarak maksimum, dokumen yang hanya berisi hit yang kesenjangannya adalah >100 istilah logis akan menerima peringkat 0. Untuk informasi selengkapnya tentang peringkat pencarian kedekatan kustom, lihat Membatasi Hasil Pencarian dengan RANK.
Opsi mengubah kata kebisingan server
Nilai mengubah kata kebisingan berdampak pada bagaimana SQL Server memperlakukan stopword jika ditentukan dalam pencarian kedekatan. Untuk informasi selengkapnya, lihat mengubah kata kebisingan Opsi Konfigurasi Server.
Lihat Juga
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Kueri dengan Pencarian Teks Lengkap