【问题标题】:What is the SQL used to do a search similar to "Related Questions" on Stackoverflow用于在 Stackoverflow 上进行类似于“相关问题”的搜索的 SQL 是什么
【发布时间】:2010-10-30 12:56:49
【问题描述】:

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

如何编写 SQL 语句来搜索我的数据库的标题和摘要字段以查找类似问题?

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

我能想到的步骤是;

  1. 去掉引号
  2. 将句子拆分为单词数组并对每个单词运行 SQL 搜索。

如果我这样做,我猜我不会得到任何有意义的结果。我不确定服务器上是否启用了全文搜索,所以我没有使用它。使用全文搜索会有优势吗?

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

使用 SQL 2005

【问题讨论】:

    标签: sql search text


    【解决方案1】:

    看看这个podcast

    我们的主要表现之一 优化“相关 问题”查询正在删除顶部 10,000 本最常用的英语词典 字词(由谷歌搜索确定) 在将查询提交到 SQL 之前 Server 2008 全文引擎。它的 令人震惊的是,大多数人所剩无几 删除前 10k 名后的帖子 英语词典单词。这有助于 限制和缩小返回的结果, 这使得查询显着 更快。

    【讨论】:

    • 你不想删除太多的“常用”词——“net、class、switch、case、data”都是常用的。第一遍可能会搜索关键字 sin 你的问题并使用类似的关键字查找问题
    • 这只是支持我(莫名其妙地被否决)的答案:这与 SQL 无关,而与 SQL 之前和之后所做的事情有关。
    【解决方案2】:

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

    【讨论】:

    • 输入标题而不是标签时会弹出相关问题对话框。
    • 没错,他们在标题中搜索“独特”的词。他们可能会过滤掉诸如“how”、“the”、“what”之类的词,然后搜索其他标题中的其余词,而不考虑词的位置。但他们也可能在标签中搜索那些独特的词,这些匹配项在搜索结果中的评分可能更高。
    【解决方案3】:

    在我的 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
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 除了它会在您输入标签之前进行搜索。
      【解决方案5】:

      这可能是使用匹配单词/短语的全文搜索来完成的。我已经在 MySQL 和 SQL Server 中使用它,并通过开箱即用的功能取得了不错的成功。

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

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

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

      【讨论】:

        【解决方案6】:

        它根据您输入的标题查找关键字,针对其他问题的标题和内容进行查询。在 Lucene(或类似的)中比在关系数据库中更容易(也更合适)。

        【讨论】:

          【解决方案7】:

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

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

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

          【讨论】:

            【解决方案8】:

            SQL 很可能只是“SELECT * FROM questions;”。我很难想象找到相似问题的算法是用 SQL 实现的。

            【讨论】:

            • 是的,但在这里更有建设性的东西会有所帮助。正如其他答案所证明的那样,全文引擎确实有助于完成这项工作。
            猜你喜欢
            • 2017-06-11
            • 2010-09-28
            • 1970-01-01
            • 2023-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-01
            • 2011-05-20
            相关资源
            最近更新 更多