web-dev-qa-db-ja.com

フルテキストインデックスが作成されていないため、テーブルまたはインデックス付きビューでCONTAINSまたはFREETEXT述語を使用できません

SQL Server 2008 R2データベースで次のエラーが発生しています。

フルテキストインデックスが作成されていないため、テーブルまたはインデックス付きビュー 'tblArmy'でCONTAINSまたはFREETEXT述語を使用できません。

70
DotnetSparrow
  1. 全文検索機能がインストールされていることを確認してください。

    Full-Text Search setup

  2. 全文検索カタログを作成します。

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
  3. 全文検索インデックスを作成します。

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

    インデックスを作成する前に、次を確認してください。
    -テーブルにはフルテキスト検索インデックスが1つしか許可されていないため、テーブルにはフルテキスト検索インデックスがまだありません。
    -テーブルに一意のインデックスが存在します。インデックスは、NULLを許可しない単一キー列に基づいている必要があります。
    -フルテキストカタログが存在します。デフォルトのフルテキストカタログがない場合は、フルテキストカタログ名を明示的に指定する必要があります。

SQL Sever Management Studioで手順2と3を実行できます。オブジェクトエクスプローラーで、テーブルを右クリックし、Full-Text indexメニュー項目を選択してから、Define Full-Text Index...サブメニュー項目を選択します。フルテキストインデックス作成ウィザードがプロセスをガイドします。また、まだお持ちでない場合は、フルテキスト検索カタログが作成されます。

enter image description here

詳細は MSDN で見つけることができます

101
Alex Aza

CONTAINSの回避策:列にフルテキストインデックスを作成したくない場合、パフォーマンスが優先順位の1つではない場合は、事前に何も必要としないLIKEステートメントを使用できます設定:

例:文字Qを含むすべての製品を検索します。

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

CONTAINSでクエリを使用する必要があるデータベース内のすべてのテーブルでFull-Text-Indexを定義する必要があります。

代わりにLIKEを使用できます。これにより、テーブルの設定を調整しなくてもすぐに結果が得られます。

例:

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

CONTAINSで得られた同じ結果は、LIKEでも得られます。

結果を見る: enter image description here

17
Ashraf Abusada
3
mellamokb

[フルテキスト]列をtrueに設定するもう1つの解決策があります。

たとえば、これらのソリューションは私にとってはうまくいきませんでした

ALTER TABLE news ADD FULLTEXT(headline, story);

私の解決策。

  1. テーブルを右クリック
  2. 設計
  3. 編集する列を右クリックします
  4. 全文索引
  5. 追加
  6. 閉じる
  7. リフレッシュ

次のステップ

  1. テーブルを右クリック
  2. 設計
  3. 編集する列をクリックします
  4. Mssqlの下部に「列のプロパティ」タブがあります
  5. フルテキスト仕様->(フルテキストインデックス化)をtrueに設定します。

リフレッシュ

Mssql 2014のバージョン

1
Icet

検索する特定のフィールドにフルテキストインデックスを追加する必要があります。

ALTER TABLE news ADD FULLTEXT(headline, story);

ここで、「ニュース」はテーブルであり、「見出し、ストーリー」フィールドでは全文検索を有効にすることはできません

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

と同じ%として機能します

where [Column] Like 'A00%'
0