W mojej bazie danych SQL Server 2008 R2 pojawia się następujący błąd:
Nie można użyć predykatu
CONTAINS
lubFREETEXT
w tabeli lub widoku indeksowanym „tblArmy”, ponieważ nie jest on indeksowany pełnotekstowo.
sql
sql-server
tsql
sql-server-2008
full-text-search
DotnetSparrow
źródło
źródło
Odpowiedzi:
Upewnij się, że masz zainstalowaną funkcję wyszukiwania pełnotekstowego.
Utwórz katalog wyszukiwania pełnotekstowego.
use AdventureWorks create fulltext catalog FullTextCatalog as default select * from sys.fulltext_catalogs
Utwórz indeks wyszukiwania pełnotekstowego.
create fulltext index on Production.ProductDescription(Description) key index PK_ProductDescription_ProductDescriptionID
Przed utworzeniem indeksu upewnij się, że:
- nie masz jeszcze indeksu wyszukiwania pełnotekstowego w tabeli, ponieważ w tabeli jest dozwolony tylko jeden indeks wyszukiwania pełnotekstowego - w tabeli
istnieje unikalny indeks. Indeks musi być oparty na kolumnie z jednym kluczem, która nie zezwala na wartość NULL.
- istnieje katalog pełnotekstowy. Jeśli nie ma domyślnego katalogu pełnotekstowego, należy jawnie określić nazwę katalogu pełnotekstowego.
Możesz wykonać kroki 2 i 3 w SQL Sever Management Studio. W eksploratorze obiektów kliknij prawym przyciskiem myszy tabelę, wybierz
Full-Text index
pozycję menu, a następnieDefine Full-Text Index...
pozycję podmenu. Kreator indeksowania pełnotekstowego poprowadzi Cię przez ten proces. Stworzy również dla Ciebie katalog wyszukiwania pełnotekstowego, jeśli jeszcze go nie masz.Więcej informacji można znaleźć w witrynie MSDN
źródło
Obejście problemu
CONTAINS
: Jeśli nie chcesz tworzyć pełnotekstowego indeksu w kolumnie, a wydajność nie jest jednym z Twoich priorytetów, możesz użyćLIKE
instrukcji, która nie wymaga wcześniejszej konfiguracji:Przykład: znajdź wszystkie produkty zawierające literę Q:
SELECT ID, ProductName FROM [ProductsDB].[dbo].[Products] WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
źródło
Musisz zdefiniować
Full-Text-Index
we wszystkich tabelach w bazie danych, w których chcesz użyć zapytania,CONTAINS
które zajmie trochę czasu.Zamiast tego możesz użyć narzędzia,
LIKE
które zapewni natychmiastowe wyniki bez konieczności dostosowywania jakichkolwiek ustawień tabel.Przykład:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
Ten sam wynik uzyskany
CONTAINS
za pomocąLIKE
.zobacz wynik:
źródło
Może być konieczne włączenie w tabeli indeksowania pełnotekstowego .
źródło
musisz dodać indeks pełnotekstowy do określonych pól, które chcesz przeszukać.
ALTER TABLE news ADD FULLTEXT(headline, story);
gdzie „wiadomości” to Twoja tabela, a pola „nagłówek, artykuł”, które chcesz włączyć do wyszukiwania pełnotekstowego
źródło
Jest jeszcze jedno rozwiązanie, aby ustawić pełny tekst kolumny na wartość true.
Na przykład takie rozwiązanie nie zadziałało dla mnie
ALTER TABLE news ADD FULLTEXT(headline, story);
Moje rozwiązanie.
NASTĘPNE KROKI
Odświeżać
Wersja mssql 2014
źródło
Select * from table where CONTAINS([Column], '"A00*"')
będzie działać w% tak samo jak
źródło