我创建了全文目录并尝试创建全文索引,但我尝试的任何方法都失败了。我联系了我的网络托管支持寻求帮助,并得知他们尚未安装该功能。
现在我应该以某种方式模拟全文搜索。我想做的是,搜索文本中的多个单词。我知道一些方法可以做到这一点,但性能是我关心的。
select *
from messages
where msgbody like '%word1%'
and msgbody like '%word2%'
and ...
and msgbody like '%wordn%'
我想到的另一种方式(因为我的搜索只有 and
类型,并且没有 or
)是搜索一个单词,然后搜索第二个单词第一次搜索的结果和第三次搜索的结果在第二次搜索的结果中,依此类推。但这看起来也不是一个好的选择。
最佳答案
如果你决定不寻找新的托管(不要责怪你),你可以使用类似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 )。如果不是,请将其设为主键并仅将单词的单个实例插入链接表中。
不过,要实现这一点,您将需要做一些工作 - 需要花一些时间来解析消息正文,插入以前从未见过的单词,并将记录插入到链接表中。
关于sql-server - SQL Server : simulate full-text search - other ways to do similar searches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375278/