Cari Kata Yang Dekat dengan Kata Lain dengan NEAR

Berlaku untuk: SQL ServerAzure SQL DatabaseAzure 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 dari 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 dalam tabel Production.Document dari database sampel AdventureWorks untuk semua ringkasan dokumen yang berisi kata "reflektor" dalam dokumen yang sama dengan kata "braket".

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"):

" "Catsenjoyhunting mice``, but avoiddogs``.

Istilah kedekatan yang sama tidak akan mengembalikan baris berikut, karena jarak maksimum terlampaui oleh empat istilah non-pencarian (""enjoy, "but", "usually", dan "avoid"):

" "Catsenjoyhunting mice``, but usually avoiddogs``.

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:

  • MENGANDUNG('DEKAT(((istilah1, istilah2),5) DAN istilah3')

  • CONTAINS('NEAR((term1, term2),5) OR term3')

  • MENGANDUNG('DEKAT(((istilah1, istilah2),5) DAN BUKAN istilah3')

  • MENGANDUNG('DEKAT(((term1, term2),5) DAN NEAR((term3, term4),2)')

  • MENGANDUNG('DEKAT(((istilah1, istilah2),5) ATAU DEKAT((istilah3, istilah4),2, BENAR)')

Contohnya,

CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')  

Anda tidak dapat menggabungkan NEAR dengan istilah generasi (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 berikut "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-istilah dalam paragraf yang berbeda diperlakukan sebagai lebih dipisahkan. 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 Pemeringkatan 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 sejauh >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 server mengubah kata bising

    Nilai transformasi kata derau memengaruhi cara SQL Server memperlakukan kata henti jika kata tersebut ditentukan dalam pencarian berbasis kedekatan. Untuk informasi selengkapnya, lihat mengubah kata kebisingan Opsi Konfigurasi Server.