Tam metin dizine alınmadığı için tablo veya dizine alınmış görünümde CONTAINS veya FREETEXT koşulu kullanılamaz


98

SQL server 2008 R2 veritabanımda aşağıdaki hatayı alıyorum:

Tablo veya dizinlenmiş görünüm 'tblArmy' üzerinde bir CONTAINSveya FREETEXTyüklem kullanılamaz çünkü tam metin dizinli değildir.


1
Tam metin kataloğu oluşturdunuz mu?
Alex K.

Yanıtlar:


113
  1. Tam metin arama özelliğinin yüklü olduğundan emin olun.

    Tam Metin Arama kurulumu

  2. Tam metin arama kataloğu oluşturun.

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
  3. Tam metin arama dizini oluşturun.

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

    Dizini oluşturmadan önce şunlardan emin olun:
    - bir tabloda yalnızca bir tam metin arama dizinine izin verildiğinden, tabloda tam metin arama
    dizininiz yok - tabloda benzersiz bir dizin var. Dizin, NULL'a izin vermeyen tek anahtarlı sütuna dayanmalıdır.
    - tam metin kataloğu mevcuttur. Varsayılan tam metin kataloğu yoksa, tam metin katalog adını açıkça belirtmeniz gerekir.

SQL Sunucu Management Studio'da adım 2 ve 3'ü yapabilirsiniz. Nesne gezgininde, bir tabloya sağ tıklayın, Full-Text indexmenü öğesini ve ardından Define Full-Text Index...alt menü öğesini seçin. Tam Metin indeksleme sihirbazı süreç boyunca size yol gösterecektir. Henüz sahip değilseniz, tam metin arama kataloğu da oluşturacaktır.

görüntü açıklamasını buraya girin

MSDN'de daha fazla bilgi bulabilirsiniz


İyi bilgi Alex! NOT: Azure SQL kullananlar için, şu an itibariyle İçerir Tablosunu desteklememektedir. Buraya bakın: msdn.microsoft.com/library/azure/ee336253.aspx
Termato

Ayrıca, SQL Express Advanced Services kullanıyorsanız, Tam Metin Dizini oluşturmak için buraya bakın: stackoverflow.com/questions/10407337/…
Termato

71

Şunun için bir çözüm CONTAINS: Sütunda tam metin Dizini oluşturmak istemiyorsanız ve performans önceliklerinizden LIKEbiri değilse, önceden herhangi bir yapılandırmaya ihtiyaç duymayan ifadeyi kullanabilirsiniz :

Örnek: Q harfini içeren tüm Ürünleri bulun:

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'

1
bağlantı . LIKE Transact-SQL koşulu yalnızca karakter kalıpları üzerinde çalışır. Ayrıca, biçimlendirilmiş ikili verileri sorgulamak için LIKE yüklemini kullanamazsınız. Ayrıca, büyük miktarda yapılandırılmamış metin verisine yönelik bir LIKE sorgusu, aynı verilere yönelik eşdeğer bir tam metin sorgusundan çok daha yavaştır.
Manolis

3
Ah, tatlı ... montajcınızı kazmanızı ve ortam ayarlarınızla uğraşmanızı gerektirmeyen kolay, yuvarlak yol. Aferin!
Christine

21

Full-Text-IndexVeritabanındaki tüm tablolarda, CONTAINSbazen sürecek bir sorgu kullanmanız gereken yerlerde tanımlamalısınız .

Bunun yerine LIKE, tablolar için herhangi bir ayar yapmanıza gerek kalmadan size anında sonuç verecek olanı kullanabilirsiniz .

Misal:

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

İle elde edilen aynı sonuç ile elde CONTAINSedilebilir LIKE.

sonucu görün: görüntü açıklamasını buraya girin


Bu gerçekten zekice
WonderWorker

6
Bu güzel bir numara, ancak bu cevabın ifade edilme şekli yanlış. "Sadece kullanma" değil. Bunu yapmanın bazı ciddi performans etkileri vardır ve bunu bir üretim sistemine koyan herhangi biri, indekslenmemiş bir sütunda bunun gibi tam tablo taramaları yapma konusunda çok dikkatli düşünmelidir.
caesay

3

Tam metin aramayı etkinleştirme / devre dışı bırakma bağlam menüsünde grileşir. Sanırım Tam metin aramayı yüklemem gerekiyor. Tam metin aramayı nasıl kurabilirim?
DotnetSparrow

SQL Server için yüklemeyi çalıştırın ve kurulu bileşenleri (veya benzer bir şeyi) değiştirmek için bir seçenek olmalıdır. Bunu tıklayın ve ardından uygun zamanda Tam Metin onay kutusunu işaretleyin ve iyi olmalısınız. Üzgünüm, elimde bir tane yok veya daha spesifik talimatlar verirdim.
Tom H

@Hi Tom: SQL server 2008 R2 yükleyicisini çalıştırdığımda özellik ekleme seçeneğini görmedim.
DotnetSparrow

1

Aramak istediğiniz belirli alanlara tam metin dizini eklemeniz gerekir.

ALTER TABLE news ADD FULLTEXT(headline, story);

"haberler" tablonuzdur ve tam metin araması için etkinleştirmek istemediğiniz "başlık, hikaye" alanları


1

Sütun Tam metni true olarak ayarlamak için bir çözüm daha var.

Örneğin bu çözüm benim için işe yaramadı

ALTER TABLE news ADD FULLTEXT(headline, story);

Çözümüm.

  1. Masaya sağ tıklayın
  2. Tasarım
  3. Düzenlemek istediğiniz sütuna sağ tıklayın
  4. Tam metin dizini
  5. Ekle
  6. Kapat
  7. Yenile

SONRAKİ ADIMLAR

  1. Masaya sağ tıklayın
  2. Tasarım
  3. Düzenlemek istediğiniz sütuna tıklayın
  4. Mssql'nin altında "Sütun özellikleri" sekmesi olacak
  5. Tam Metin Belirtimi -> (Tam Metin Dizine Alınmıştır) true olarak ayarlayın.

Yenile

Mssql 2014 sürümü


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

% olarak aynı şekilde hareket edecek

where [Column] Like 'A00%'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.