Можно ли использовать CONTAINSTABLE для поиска «word1» в column1 И «word2» в column2 - PullRequest
1 голос
/ 25 ноября 2008

Раньше у нас был поиск, который проверял два столбца на наличие некоторых слов. Оба столбца должны содержать несколько слов, поэтому мы используем 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 столбцами, НО учтите, что мне нужно искать только слово 1 или слово 2 в столбце 1 (не интересно, если у нас есть слово 1 или слово 2 в столбце 2) Также обратите внимание на то, что было в предложении where. Есть ли что-то вроде:

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 Ответ

2 голосов
/ 25 ноября 2008

Вы можете сделать это с помощью внутреннего соединения во второй содержащейся таблице, хотя вы можете захотеть сделать что-то более изящное, чем сложение рангов, как я сделал в примере

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...