1

我们曾经有一个搜索,它会检查两列中的某些单词。两列都必须包含一些提供的单词,所以我们使用 AND ... 毫无疑问,FULLTEXT INDEX 用于列。

选择或多或少是这样的:

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

现在我们需要在结果中添加排名。我们想使用 CONTAINSTABLE 功能......只有一列很简单。就像是:

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

是否可以使用 2 列但考虑到我只需要在 column1 中搜索 word1 或 word2 (如果我们在 column2 中有 word1 或 word2 不感兴趣)。还要考虑在 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

您可以通过在第二个包含表上的内部连接来做到这一点,尽管您可能想做一些比我在示例中添加排名更有趣的事情

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 回答