Tidak dapat menggunakan predikat CONTAINS atau FREETEXT pada tabel atau tampilan yang diindeks karena tidak diindeks teks lengkap

98

Saya mendapatkan kesalahan berikut dalam database SQL server 2008 R2 saya:

Tidak dapat menggunakan CONTAINSatau FREETEXTpredikat pada tabel atau tampilan terindeks 'tblArmy' karena tidak diindeks teks lengkap.

DotnetSparrow
sumber
1
Apakah Anda benar-benar membuat katalog teks lengkap?
Alex K.

Jawaban:

113
  1. Pastikan Anda telah menginstal fitur pencarian teks lengkap.

    Pengaturan Pencarian Teks Lengkap

  2. Buat katalog pencarian teks lengkap.

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
  3. Buat indeks pencarian teks lengkap.

     create fulltext index on Production.ProductDescription(Description)
     key index PK_ProductDescription_ProductDescriptionID
    

    Sebelum Anda membuat indeks, pastikan:
    - Anda belum memiliki indeks pencarian teks lengkap di tabel karena hanya satu indeks pencarian teks lengkap yang diperbolehkan di tabel
    - indeks unik ada di tabel. Indeks harus didasarkan pada kolom kunci tunggal, yang tidak memungkinkan NULL.
    - katalog teks lengkap ada. Anda harus menentukan nama katalog teks lengkap secara eksplisit jika tidak ada katalog teks lengkap default.

Anda dapat melakukan langkah 2 dan 3 di SQL Sever Management Studio. Di penjelajah objek, klik kanan pada tabel, pilih Full-Text indexitem menu, lalu item Define Full-Text Index...sub-menu. Wizard pengindeksan Teks Lengkap akan memandu Anda melalui proses tersebut. Ini juga akan membuat katalog pencarian teks lengkap untuk Anda jika Anda belum memilikinya.

masukkan deskripsi gambar di sini

Anda dapat menemukan info lebih lanjut di MSDN

Alex Aza
sumber
Informasi yang bagus Alex! CATATAN: untuk mereka yang menggunakan Azure SQL, itu tidak mendukung Tabel Berisi seperti yang sekarang. Lihat di sini: msdn.microsoft.com/library/azure/ee336253.aspx
Termato
Juga, jika menggunakan SQL Express Advanced Services, lihat di sini untuk membuat Indeks Teks Lengkap: stackoverflow.com/questions/10407337/…
Termato
71

Solusi untuk CONTAINS: Jika Anda tidak ingin membuat Indeks teks lengkap pada kolom, dan kinerja bukan salah satu prioritas Anda, Anda dapat menggunakan LIKEpernyataan yang tidak memerlukan konfigurasi sebelumnya:

Contoh: temukan semua Produk yang mengandung huruf Q:

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Mohammad Sepahvand
sumber
1
tautan . Predikat LIKE Transact-SQL hanya berfungsi pada pola karakter. Selain itu, Anda tidak dapat menggunakan predikat LIKE untuk meminta data biner yang diformat. Lebih lanjut, kueri LIKE terhadap sejumlah besar data teks tidak terstruktur jauh lebih lambat daripada kueri teks lengkap yang setara terhadap data yang sama.
Manolis
3
Ah, manis ... cara yang mudah dan bulat yang tidak mengharuskan Anda menggali pemasang dan mengotak-atik pengaturan lingkungan Anda. Sudah selesai dilakukan dengan baik!
Christine
21

Anda harus menentukan Full-Text-Indexpada semua tabel dalam database di mana Anda perlu menggunakan kueri CONTAINSyang akan memakan waktu.

Sebagai gantinya Anda dapat menggunakan LIKEyang akan memberi Anda hasil instan tanpa perlu menyesuaikan pengaturan apa pun untuk tabel.

Contoh:

SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'

Hasil yang sama yang diperoleh dengan CONTAINSdapat diperoleh dengan LIKE.

lihat hasilnya: masukkan deskripsi gambar di sini

Ashraf Abusada
sumber
Itu sangat pintar
WonderWorker
6
Ini adalah trik yang bagus, tetapi cara jawaban ini diutarakan salah. Jangan "gunakan saja" itu. Ada beberapa implikasi kinerja yang serius untuk melakukan ini dan siapa pun yang memasukkan ini ke dalam sistem produksi harus berpikir sangat hati-hati tentang melakukan pemindaian tabel lengkap seperti ini pada kolom yang tidak diindeks.
caesay
3

Anda mungkin perlu mengaktifkan tabel untuk pengindeksan teks lengkap .

mellamokb.dll
sumber
aktifkan / nonaktifkan Pencarian teks lengkap berwarna abu-abu di menu konteks. Saya rasa saya perlu menginstal Pencarian teks lengkap. Bagaimana cara menginstal pencarian teks lengkap?
DotnetSparrow
Jalankan penginstalan untuk SQL Server dan harus ada opsi untuk mengubah komponen yang diinstal (atau yang serupa). Klik itu kemudian centang kotak Teks Lengkap pada waktu yang tepat dan Anda akan baik-baik saja. Maaf, saya tidak punya yang berguna atau saya akan memberikan instruksi yang lebih spesifik.
Tom H
@Hi Tom: Saya tidak melihat opsi untuk menambahkan fitur saat menjalankan penginstal SQL server 2008 R2.
DotnetSparrow
1

Anda harus menambahkan indeks teks lengkap pada bidang tertentu yang ingin Anda cari.

ALTER TABLE news ADD FULLTEXT(headline, story);

di mana "berita" adalah tabel Anda dan kolom "judul, berita" yang tidak akan Anda aktifkan untuk pencarian teks lengkap

SimonQuest
sumber
1

Ada satu solusi lagi untuk menyetel kolom Full text menjadi true.

Solusi ini misalnya tidak berhasil untuk saya

ALTER TABLE news ADD FULLTEXT(headline, story);

Solusi saya.

  1. Klik kanan pada tabel
  2. Rancangan
  3. Klik kanan pada kolom yang ingin Anda edit
  4. Indeks teks lengkap
  5. Menambahkan
  6. Menutup
  7. Menyegarkan

LANGKAH SELANJUTNYA

  1. Klik kanan pada tabel
  2. Rancangan
  3. Klik pada kolom yang ingin Anda edit
  4. Di bawah mssql Anda akan ada tab "Properti kolom"
  5. Spesifikasi Teks Lengkap -> (Berindeks Teks Penuh) disetel ke true.

Menyegarkan

Versi mssql 2014

Icet
sumber
-1
Select * from table
where CONTAINS([Column], '"A00*"')  

akan bertindak sebagai% sama dengan

where [Column] Like 'A00%'
Dnyanesh Mijagiri
sumber