2016-11-11 19 views
1

我有幾個關鍵字,我想在表tblSearch的一列中搜索。在SQL Server中搜索多個關鍵字並按最大匹配排序結果

例如關鍵字是sql,java,net。 ,列值是像下面

  1. ACCE java的淨吸納
  2. 共享Java網絡訪問SQL蟒蛇
  3. 沒有高科技
  4. SQL服務器

所以在這裏我想結果爲2,1,4。

試圖使用像聲明,但我應該如何命令他們基於最大最多匹配的關鍵字數量。我沒有全文搜索選項。沒有使用很多類似的語句,是否有最簡單的方法?

+0

是關鍵字是存儲逗號分開,單個變量?或每個關鍵字是單獨的變量 –

+0

現在單個變量和分裂在一個表中,但如果需要,那麼我可以保持它們分開,這不是一個問題。 –

回答

2

全文搜索具有基於匹配的自動排序功能。

如果你已經建立了適當的全文索引,在ID列(我假設在你的例子中用你的例子中的值1,2,3和4標記)上的唯一聚簇索引,那麼你所要做的就是運行下面的查詢。

DECLARE @search varchar(100) = '"sql*" AND "java*" AND "net*"' 

SELECT t.* 
FROM tlbSearch t 
    INNER JOIN CONTAINSTABLE (tblSearch, searchColumn, @search) Ktbl ON T.ID = Ktbl.[key] 
ORDER BY Ktbl.[rank] ASC 

爲了利用全文搜索,您必須使用全文相應的過濾功能。全文的LIKE=的等效項爲FREETEXTCONTAINS,以及它們的FREETEXTTABLECONTAINSTABLE,它們會自動返回一個包含所需rank列的表。

此外,爲了使其發揮作用,您的所有關鍵字都需要位於同一列中 - 事實證明這是一種冗餘,但這是全文搜索所需的。所以,你的tblSearch需要有這樣的結構:

+----+----------------------------------+ 
| ID |   searchColumn   | 
+----+----------------------------------+ 
| 1 | acce java net take    | 
| 2 | share java net access sql python | 
| 3 | no tech       | 
| 4 | sql server with     | 
+----+----------------------------------+ 

(如果你想發佈的數據表#2像我一樣,you can use this

相關問題