是否可以使用CONTAINSTABLE在column1中搜索“word1”,在column2中搜索“word2”

时间:2008-11-25 10:21:51

标签: sql sql-server tsql full-text-search

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

1 个答案:

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