SQL Server:模拟全文搜索 - 进行类似搜索的其他方法

时间:2012-11-14 08:28:19

标签: sql-server full-text-search

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

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

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

我想到的另一种方式(因为我的搜索只有and类型且没有or)是搜索一个字然后搜索第一个搜索结果中的第二个字第二次搜索结果中的第三次搜索,依此类推。但这也不是一个好的选择。

1 个答案:

答案 0 :(得分: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)。如果你不是,那就把它作为主键&只将单个单词实例插入到链接表中。

但是,为了实现这一点,你将不得不做一些工作 - 它将需要解析消息体,插入以前从未见过的单词,并将记录插入到链接表中。 / p>