2012-01-24 14 views
4

は私のテーブルには、varchar型としてフィールド「説明」(マックス)SQL Serverの複数の単語の検索と結果をランク付け

を持って

検索条件として、私は、ユーザーを検索したいユーザーは「ヴィンテージアウディ車」を入力仮定しますVintage OR Audi OR Carと入力します。結果には、上の "説明"にある3つの単語と、任意の2つの単語を含む行と、いずれか1つの単語を含む行をすべて含む行が表示されます。

これがどのように達成できるか教えてください。

私は全文検索を使用しています。コマンドCONTAINSTABLEでフルテキスト検索を使用可能にする必要があります

+0

FTSに精通していない、あなたは本当に複数のクエリを持っていると思います一緒に(ALLではない)結合された。私はFTSで、3つのクエリ、ヴィンテージANDオーディとカー、ビンテージANDオーディ+ヴィンテージANDカー、そしてビンテージORオーディまたはカーの順で書くことができます。 – billinkc

+0

これはクエリのパフォーマンスを大幅に低下させます。また、私は、検索条件に常に3つの単語しか存在しないと仮定することはできません –

答えて

2

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; 

がランクは重量で計算されるので、説明「ヴィンテージアウディ」の行は、行よりも高いランクを取得します「Audi」という記述を含む。

0

はさえ、私はテーブルの車

ALTER TABLE Car ENGINE = MYISAM; 

を変更MYISAMエンジン

を使用して、それを解決し、同じ問題を持っていた、その後

select * FROM Car WHERE MATCH (Description) AGAINST ('Vintage Audi Car' IN BOOLEAN MODE); 
関連する問題