如何在 SQL 中首先使用 FULLTEXT 显示相关记录?

Posted

技术标签:

【中文标题】如何在 SQL 中首先使用 FULLTEXT 显示相关记录?【英文标题】:How to display relevant record first using FULLTEXT in SQL? 【发布时间】:2009-02-27 17:03:42 【问题描述】:

我在我的 sql 查询中使用 FULLTEXT 来搜索记录。

        SELECT * FROM (SELECT d.DataId, (SELECT [Name] FROM Category WHERE CategoryId = d.CategoryId) AS 'Category', d.Description, d.CompanyName, d.City, d.CategoryId,
                d.CreatedOn, d.Rank, d.voteCount, d.commentCount, d.viewCount
        FROM Data d 
                INNER JOIN Keyword k
                    ON d.DataId = k.DataId
        WHERE FREETEXT(k.Keyword, @SearchQ) AND d.CategoryId=@CategoryId AND d.IsSearch=1 AND d.IsApproved=1

当我搜索 rockstone hotel 时,我的表中有一条同名的记录,但它首先显示了一些其他记录,然后在 3 位置显示“rockstone hotel's”记录。为什么会发生,有什么方法可以改善呢???

我使用的是 SQL Server 2005

谢谢

【问题讨论】:

【参考方案1】:

您没有 Order By 子句,它可以释放数据库以任何顺序返回记录。通常它是在处理 where 子句时遇到它们的顺序,因此很容易相信数据库使用的是“自然”顺序。如果您想要一个特定的订单,您要么需要添加将使用您创建的某些评分方法的 Order By 子句,要么必须在接收记录的程序中对它们进行排序。

(我不得不猜测您要提取的其他记录也包含搜索条件,只是在文本字段中更远。)

有关使用 Rank 对记录进行排序的示例,请参见此处:SQL Server Freetext match - how do I sort by relevance Rank 列由文本匹配调用生成。

【讨论】:

我们不能根据搜索关键字的相关性对记录进行排序吗??【参考方案2】:

引自 MSDN(SQL Server 开发者中心):

与 CONTAINS 搜索不同 条件 AND 是关键字,当 在 freetext_string 中使用单词 'and' 被认为是一个干扰词,将是 丢弃。

http://msdn.microsoft.com/en-us/library/ms176078(SQL.90).aspx#

【讨论】:

以上是关于如何在 SQL 中首先使用 FULLTEXT 显示相关记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ydn-db-fulltext 在数组中索引子对象属性?

PHP+MYSQL实现全文检索及全文检索工具

Mysql 在 FULLTEXT 索引具有相同数据的 2 台服务器之间显示不同的结果

启动SQL Server FullText Search(MSSQLSERVER)提示请求失败或服务未及时响应。有关详细信息,请参见事件日

FULLTEXT 索引需要更长的时间来执行

使用 js 实现文本过多时隐藏部分文本