1

以前は、いくつかの単語について 2 つの列をチェックする検索がありました。両方の列には提供された単語が含まれている必要があるため、AND を使用します...列で FULLTEXT INDEX が使用されていることは間違いありません。

選択は多かれ少なかれ次のようになります。

SELECT
    * 
FROM SomeTable
WHERE (CONTAINS(Column1, 'word1 OR word2') AND CONTAINS(Column2, 'word3 OR word4'))

次に、結果にランキングを追加する必要があります。CONTAINSTABLE 機能を使用したいと思います... 1 つの列だけが単純です。何かのようなもの:

SELECT
    SomeTable.*,
    tmp.RANK
FROM SomeTable
INNER JOIN CONTAINSTABLE(SomeTable, Column1, 'word1 OR word2') as tmp
ON tmp.[KEY] = SomeTable.ID

2列でそれを行うことは可能ですが、列1で単語1または単語2を検索するだけでよいと考えてください(列2に単語1または単語2があるかどうかは関係ありません)。また、WHERE 句に含まれていた AND も考慮してください。次のようなものがありますか:

SELECT
    SomeTable.*,
    tmp.RANK
FROM SomeTable
INNER JOIN CONTAINSTABLE(SomeTable, (Column1, Column2), 'column1:(word1 OR word2) AND column2:(word3 OR word4)') as tmp
ON tmp.[KEY] = SomeTable.ID
4

1 に答える 1

2

サンプルで行ったように、ランクを一緒に追加するよりも少し手の込んだことをしたいかもしれませんが、2 番目の包含テーブルの内部結合でこれを行うことができます。

SELECT
    SomeTable.*,    
    col1.RANK + col2.RANK
FROM 
    SomeTable
INNER JOIN CONTAINSTABLE(SomeTable, Column1, 'word1 OR word2') as col1 ON 
    col1.[KEY] = SomeTable.ID
INNER JOIN CONTAINSTABLE(SomeTable, Column2, 'word3 OR word4') as col2 ON 
    col2.[KEY] = SomeTable.ID
于 2008-11-25T11:21:41.910 に答える