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


95

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

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


1
実際にフルテキストカタログを作成しましたか?
Alex K.

回答:


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

    全文検索の設定

  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...サブメニュー項目を選択します。フルテキストインデックス作成ウィザードがプロセスをガイドします。まだない場合は、フルテキスト検索カタログも作成されます。

ここに画像の説明を入力してください

詳細については、MSDNをご覧ください。


良い情報アレックス!注:Azure SQLを使用している場合、現時点では、Containsテーブルはサポートされていません。ここを参照してください:msdn.microsoft.com/library/azure/ee336253.aspx
Termato

:また、SQL Expressアドバンストサービスを使用している場合、本文インデックスを作成するには、ここを参照stackoverflow.com/questions/10407337/...
Termato

69

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

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

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

1
リンク。LIKE Transact-SQL述語は、文字パターンでのみ機能します。また、LIKE述語を使用して、フォーマットされたバイナリデータをクエリすることはできません。さらに、大量の非構造化テキストデータに対するLIKEクエリは、同じデータに対する同等のフルテキストクエリよりもはるかに低速です。
Manolis 2013年

1
ああ、甘い...インストーラーを掘り下げて環境設定を変更したりする必要のない、簡単でラウンドアラウンドの方法。よくやった!
クリスティーヌ

21

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

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

例:

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

と同じ結果CONTAINSがで得られLIKEます。

結果を見る: ここに画像の説明を入力してください


それは本当に賢いです
WonderWorker '11

6
これはいいトリックですが、この答えの言い方は間違っています。「そのまま使用」しないでください。これを行うとパフォーマンスに深刻な影響が及ぶため、これを本番システムに導入する場合は、インデックスのない列でこのような全表スキャンを実行することを非常に慎重に検討する必要があります。
caesay 2017年

3

全文検索の有効化/無効化は、コンテキストメニューでグレー表示されます。全文検索をインストールする必要があると思います。全文検索をインストールするにはどうすればよいですか?
DotnetSparrow

SQL Serverのインストールを実行すると、インストールされたコンポーネント(または同様のもの)を変更するためのオプションが表示されます。それをクリックし、適切なタイミングで[フルテキスト]チェックボックスをオンにすると、問題ありません。申し訳ありませんが、便利なものがありません。または、より具体的な手順を説明します。
トムH

@こんにちはトム:SQL Server 2008 R2インストーラーを実行すると、機能を追加するオプションが表示されませんでした。
DotnetSparrow

1

検索したい特定のフィールドに全文索引を追加する必要があります。

ALTER TABLE news ADD FULLTEXT(headline, story);

ここで、「news」はテーブルで、「headline、story」フィールドは全文検索を有効にしない


1

列の全文をtrueに設定するもう1つの解決策があります。

たとえば、これらの解決策は私にはうまくいきませんでした

ALTER TABLE news ADD FULLTEXT(headline, story);

私の解決策。

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

次のステップ

  1. テーブルを右クリック
  2. 設計
  3. 編集したい列をクリックしてください
  4. mssqlの下部には、[列のプロパティ]タブがあります。
  5. フルテキスト仕様->(Is Full-text Indexed)はtrueに設定されています。

リフレッシュ

mssql 2014のバージョン


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.