什么是用于执行类似于Stackoverflow上的“相关问题”的搜索的SQL

时间:2009-06-01 22:10:05

标签: sql search text

我正在尝试在Stackoverflow上实现类似于“相关问题”的功能。

我如何编写SQL语句来搜索数据库的Title and Summary字段以寻找类似的问题?

如果我的问题是:“用于执行类似于Stackoverflow上的”相关问题“的搜索的SQL是什么”。

我能想到的步骤是;

  1. 剥去引号
  2. 将句子拆分成一个单词数组,并对每个单词进行SQL搜索。
  3. 如果我这样做,我猜我不会得到任何有意义的结果。我不确定服务器上是否启用了全文搜索,所以我没有使用它。使用全文搜索会有优势吗?

    我发现了类似的问题,但没有答案:similar question

    使用SQL 2005

8 个答案:

答案 0 :(得分:7)

查看此podcast

  

我们的主要表现之一   优化“相关的   问题“查询正在删除顶部   10,000个最常见的英语词典   单词(由Google搜索确定)   在将查询提交给SQL之前   Server 2008全文引擎。它的   令人震惊的是,大多数人都没有多少   删除前10k后的帖子   英语词典单词。这有帮助   限制并缩小返回的结果,   这使查询显着   更快。

答案 1 :(得分:1)

它们可能基于添加到问题中的标签而相关...

答案 2 :(得分:1)

在我的SQL 2005服务器上启用全文搜索后,我使用以下存储过程来搜索文本。

ALTER PROCEDURE [dbo].[GetSimilarIssues] 
(
 @InputSearch varchar(255)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

DECLARE @SearchText varchar(500);

SELECT @SearchText = '"' + @InputSearch + '*"'

SELECT  PostId, Summary, [Description], 
Created
FROM Issue

WHERE FREETEXT (Summary, @SearchText);
END

答案 3 :(得分:0)

我很确定基于与每个帖子相关联的标签来实现该功能是最有效的。

答案 4 :(得分:0)

这可能是使用与单词/短语匹配的全文搜索完成的。我已经在MySQL和SQL Server中使用它,并且具有开箱即用的功能。

您可以在以下位置找到有关MySQL全文搜索的更多信息:

http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

或者只是谷歌全文搜索,你会发现很多信息。

答案 5 :(得分:0)

根据您输入的标题查看关键字,查询其他问题的标题和内容。在Lucene(或类似的)中然后在关系数据库中可能更容易(也更合适)。

答案 6 :(得分:0)

我会说这可能是对问题标题和问题内容和答案的全文搜索以及使用您输入的单个词(不是整个标题)。然后,使用全文的排名功能,显示排名最高的前10个左右的问题。

正如tydok指出的那样,看起来他们正在使用全文搜索(我无法想象其他任何方式)。

这是MSDN reference on Full-Text Searching,确定使用的具体查询可能不会发生。

答案 7 :(得分:-4)

SQL非常好,可能只是“SELECT * FROM questions;”。我发现很难想象找到类似问题的算法是在SQL中实现的。