【问题标题】:Is it possible to use CONTAINSTABLE to search for "word1" in column1 AND "word2" in column2是否可以使用 CONTAINSTABLE 在 column1 中搜索“word1”并在 column2 中搜索“word2”
【发布时间】:2010-09-23 22:24:39
【问题描述】:

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

select 差不多是这样的:

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

【问题讨论】:

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


    【解决方案1】:

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

    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
    

    【讨论】:

    • 我不喜欢多个连接的想法,使用这个你不能设置一个顶部到 CONTAINSTABLE(那么你可能会失去正确的结果)。总排名最高值也取决于有多少连接。但是......这行得通,所以除非有更好的答案,否则我会接受这个。
    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多