2

フルテキスト カタログを作成し、フルテキスト インデックスを作成しようとしましたが、どの方法を試しても失敗しました。Web ホスティング サポートに問い合わせたところ、その機能がインストールされていないことがわかりました。

ここで、どういうわけか全文検索をシミュレートする必要があります。私がやりたいのは、テキスト内の複数の単語を検索することです。私はそれを行ういくつかの方法を知っていますが、パフォーマンスが私の関心事です。

select * 
from messages 
where msgbody like '%word1%' 
  and msgbody like '%word2%' 
  and ... 
  and msgbody like '%wordn%'

私が考えたもう 1 つの方法 (私の検索はandtype のみであり、 がないためor) は、1 つの単語を検索してから、最初の検索の結果で 2 番目の単語を検索し、2 番目の検索の結果で 3 番目の検索などを検索することです。しかし、これも良い選択ではないようです。

4

1 に答える 1

2

新しいホスティングを見つけないと決心した場合(あなたを責めないでください) String.Split()、配列を与えるようなものを使用することができます(スペース文字を分割します)。次に、これらの文字列をすべて「単語」テーブルなどに追加します。次のような単一の「単語」テーブルとリンクテーブルを作成する方が、より参照的に適切です。

create table TheWords
    (
    TheWord NVARCHAR(32) NOT NULL ,
        CONSTRAINT PKC_TheWords
        PRIMARY KEY CLUSTERED ( TheWord ) ,
    TheWordID INT IDENTITY (1,1) NOT NULL
    )

create table WordsInMsgBody
    (
    MsgBodyID INT NOT NULL ,
        CONSTRAINT FK_MsgBodyID@WordsInBody
        FOREIGN KEY ( MsgBodyID )
        REFERENCES dbo.MsgBody ( MsgBodyID ) ,
    TheWordID INT NOT NULL ,
        CONSTRAINT FK_TheWordID@WordsInBody
        FOREIGN KEY ( TheWordID )
        REFERENCES dbo.TheWords ( TheWordID ) ,
        CONSTRAINT PKC_WordsInBody
        PRIMARY KEY CLUSTERED ( MsgBodyID , TheWordID )
    )

メッセージに含まれる特定の単語のに関心がある場合は、最後の制約(PKC_WordsInBody)を省略できます。そうでない場合は、それを主キーにして、単語の1つのインスタンスのみをリンクテーブルに挿入します。

ただし、これを実装するには、いくつかの作業を行う必要があります。メッセージ本文を解析し、これまでに見たことのない単語を挿入し、リンクテーブルにレコードを挿入する作業が必要になります。

于 2013-02-13T23:43:08.373 に答える