sql-server - SQL Server : simulate full-text search - other ways to do similar searches

标签 sql-server full-text-search

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

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

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/

相关文章:

sql - 如何从每组中选择前 5%?

java - Elasticsearch 优先考虑从匹配开始

android - 如何在 Android 中自定义 FTS 分词器

mysql - 如果我将 jdbc river 与 mysql 一起使用, Elasticsearch 是否会自行更新其索引?

sql-server - SQL Server 全文搜索是搜索短语而不是文档的正确工具吗?

sql-server - 多个表上的 SQL 2008 全文搜索目录

sql-server - SSIS 14 - 暂存区 - 合并两个来源需要很多时间

sql - 查找特定索引属于哪个表

c# - 如何通过 HTTP 从 C# 应用程序连接到 SQL Server?

MySQL MATCH() AGAINST() 等效于 SQL Server