2

我创建了全文目录并尝试创建全文索引,但是我尝试过的任何方法都失败了。好吧,我联系了我的网络托管支持以寻求帮助,并了解到他们尚未安装该功能。

现在我应该以某种方式模拟全文搜索。我想要做的是,在文本中搜索多个单词。我知道一些方法来做到这一点,但性能是我关心的。

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

我想到的另一种方法(因为我的搜索只有andtype 而没有or)是搜索一个单词,然后在第一次搜索的结果中搜索第二个单词,在第二次搜索的结果中搜索第三个单词,依此类推。但这看起来也不是一个好的选择。

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 ) 。如果不是,请将其设为主键并仅将单词的单个实例插入链接表。

但是,您将不得不做一些工作来实现这一点 - 解析消息正文,插入以前从未见过的单词,并将记录插入链接表中需要工作。

于 2013-02-13T23:43:08.373 回答