Полнотекстовый поиск SQL Server в CTE - PullRequest
2 голосов
/ 12 марта 2019

У меня довольно сложный запрос, который несколько раз ссылается на объединенную пару таблиц. Чтобы упростить запрос и повысить производительность, я вытащил эту пару таблиц в подзапрос.

Однако, теперь мой полнотекстовый индекс не работает, утверждая, что CTE_Query.Indexedfield не полнотекстовый индексированный.

Упрощенный пример запроса ниже

WITH CTE_Query AS
(
    SELECT ID, IndexedField
    FROM IndexedTable it
        INNER JOIN SomeOtherTable sot
        ON sot.itid = it.id
    WHERE blahblah...
)
SELECT CTE_Query.ID, CTE_Query.IndexedField
FROM CTE_Query
WHERE CONTAINS(CTE_Query.IndexedField, 'Some search term')
UNION ALL
SELECT CTE_Query.IndexedField
FROM CTE_Query
WHERE CONTAINS(CTE_Query.IndexedField, 'Another search term')
-- This part of the query is complex and re-uses the CTE_Query and other tables a number of times, I've simplified it here

При выполнении я получаю следующую ошибку

Cannot use a CONTAINS or FREETEXT predicate on column 'IndexedField' because it is not full-text indexed.

Это говорит о том, что SQL Server теряет тот факт, что это просто псевдоним полнотекстового индексированного поля.

Есть ли способ заставить SQL Server применить определенный полнотекстовый индекс здесь? Или это только часть того, как работает полнотекстовый индекс? Я думаю, что вполне вероятно, что индекс опирается на доступ к исходной таблице, но я не уверен, как он работает под

...