我们曾经进行过搜索,检查两列中的某些单词。两列都必须包含一些提供的单词,因此我们使用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
答案 0 :(得分: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