1

对全文搜索有疑问。

我有一个有效的查询,但我想改进它。例如,假设我正在寻找“最佳解决方案”。在我的结果中(使用 FTS、CONTAINSTABLE、NEAR、ISABOUT、*)我有列rank、id、string

排名| 编号 | 细绳
----+----+-----
430 | 33 | 我自己的最佳解决方案
430 | 32 | 最佳解决方案的方法
430 | 30 | 最佳解决方案样本
430 | 31 | 最佳解决方案
430 | 34 | 最佳解决方案创建方式
300 | 40 | 有用的最佳软件解决方案
300 | 41 | 最佳软件解决方案
200 | 50 | 世界最佳解决方案
200 | 51 | 世界最佳解决方案

所以这个查询对我来说是 100% 正确的,所有RANKs 都是正确的,但我想让这个查询更相关。

如果关键字在字符串中的位置更靠左,则它应该出现在结果中的较早位置。例如:

排名| 编号 | 细绳
----+----+-----
430 | 31 | 最佳解决方案
430 | 34 | 最佳解决方案创建方式
430 | 30 | 最佳解决方案样本
430 | 33 | 我自己的最佳解决方案
430 | 32 | 最佳解决方案的方法
300 | 41 | 最佳软件解决方案
300 | 40 | 有用的最佳软件解决方案
200 | 51 | 世界最佳解决方案
200 | 50 | 世界最佳解决方案

这可能吗?如果是这样,我怎样才能得到这个结果?

4

2 回答 2

2

你需要一个indexOf函数。在您的 sql 手册中搜索类似的功能。

然后添加一个看起来像的排序标准ORDER BY rank, CASE indexOf(string, 'best') WHEN -1 THEN 100000 ELSE indexOf(string, 'best') END

如果找不到执行某种功能的函数,请使用数据库管理器indexOf的功能自己编写。CREATE FUNCTION

于 2011-05-10T09:36:18.810 回答
1

您想要的第三方解决方案是 Sphinx(还有其他)。在此处阅读更多信息:

http://www.ioncannon.net/programming/685/full-text-search-with-sphinx/

于 2011-07-02T13:49:13.283 回答