2009-06-01 106 views
6

我正試圖實現類似於Stackoverflow上的「相關問題」的功能。什麼是SQL用於執行類似於「Stackoverflow上相關問題」的搜索

如何編寫SQL語句來搜索我的數據庫的標題和摘要字段以獲取類似問題?

如果我的問題是:「什麼是SQL用於執行搜索類似」Stackoverflow相關問題「。

我能想到的步驟是;

  1. 帶引號
  2. 拆分句子成詞的數組和運行上的每個字一個SQL搜索。

如果我這樣做,我猜我不會得到任何有意義的結果。我不確定是否在服務器上啓用了全文搜索,所以我沒有使用它。使用全文搜索會有優勢嗎?

我發現了一個類似的問題,但沒有答案:similar question

使用SQL 2005

回答

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 
1

他們可能涉及基於被添加到問題標籤...

+4

當您輸入標題而不是標籤時,彈出相關問題對話框。 – 2009-06-01 22:14:37

+0

確實,他們在標題中搜索「獨特」的單詞。他們可能會過濾掉諸如「how」,「the」,「what」等詞,並在其他標題中搜索其餘詞,而不考慮詞的位置。但他們也可能會在標籤中搜索這些獨特的詞,這些匹配可能在搜索結果中評分較高。 – Ropstah 2009-06-01 22:40:25

-4

的SQL非常好可能只是「選擇*從問題;」。我發現很難想象用SQL查找類似問題的算法。

+0

的確如此,但更有建設性的東西在這裏會有所幫助。正如其他答案所證明的那樣,全文引擎確實可以幫助完成這項工作。 – 2009-08-06 20:21:54

0

我敢肯定,基於與每個帖子相關聯的標籤實現該功能將是最有效的。

+1

除了在輸入標籤之前進行搜索。 – 2009-06-01 22:28:19

0

這可能是通過使用與文字/短語匹配的全文搜索來完成的。我已經在MySQL和SQL Server中使用它,並具有開箱即用的功能。

你可以找到更多關於MySQL的全文搜索:

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

或者只是谷歌的全文搜索,你會發現很多信息。

0

它根據您輸入的標題查找關鍵字,查詢其他問題的標題和內容。在Lucene(或類似的)中,然後在關係數據庫中做起來可能更容易(也更合適)。

0

我想說這可能是一個關於問題標題和問題內容和答案的全文搜索,以及使用您輸入的單個單詞(而不是整個標題)。然後,使用全文的排名功能,顯示排名最高的排名前10位的問題。

正如tydok指出的,它看起來像他們正在使用全文搜索(我無法想象任何其他方式)。

以下是MSDN reference on Full-Text Searching,指出所使用的特定查詢可能不會發生。

7

看看這個podcast

我們的一個主要性能 優化爲「相關 問題」查詢去除頂部 萬最常用英語詞典 單詞提交查詢到SQL Server之前(通過谷歌搜索確定) 2008全文引擎。這是 一旦你刪除頂部10k 英文字典單詞,大多數 剩下的是多麼少的。這有助於 限制和縮小返回的結果, 這使查詢顯着 更快。