2012-01-24 33 views
4

假設用戶輸入「老式奧迪車」作爲搜索條件Sql Server的多詞搜索和排名結果

我的表中有一個字段「描述」爲varchar(最大)

我要搜索用戶輸入值爲Vintage或Audi OR Car。結果應顯示包含頂部「描述」中的所有三個單詞的行和任意兩個單詞的行,然後包含任意一個單詞的行。

讓我知道這是如何實現的。

我願意使用全文搜索。

+0

不熟悉FTS,你真的有多個查詢聯合(不是'ALL'ed)在一起。我假設用FTS,你可以寫3查詢,復古和奧迪和汽車,其次是復古和奧迪+復古和汽車......其次是復古或奧迪或汽車 – billinkc

+0

這將大大降低查詢的性能。我也不能認爲總是隻有三個詞在搜索標準 –

回答

2

這應該使用帶有命令CONTAINSTABLE全文搜索成爲可能:

SELECT * FROM Car 
INNER JOIN CONTAINSTABLE(Car, Description, 'ISABOUT (Vintage weight (.5), Audi weight (0.5), Car weight (0.5))') AS A 
    ON Car.Id = A.[KEY] 
ORDER BY A.[RANK] DESC; 

秩由重量來計算,所以與描述行「復古奧迪」會比該行較高的排名與「奧迪」的描述。

0

即使我有同樣的問題,我解決它使用MyISAM引擎

改變表租車

ALTER TABLE Car ENGINE = MYISAM; 

然後

select * FROM Car WHERE MATCH (Description) AGAINST ('Vintage Audi Car' IN BOOLEAN MODE);