Подтвердить что ты не робот

Поиск FullText с CONTAINS на нескольких столбцах и предикате - AND

У меня есть таблица поиска, скажем, 4 столбца текстовых данных для поиска.

Я делаю что-то вроде этого:

SELECT * FROM dbo.SearchTable
WHERE CONTAINS((co1, col2, col3, col4), 'term1 AND term2')

Похоже, что Contains возвращает true, если term1 и term2 находятся в одном столбце. Есть ли способ указать, что все столбцы должны быть включены в AND?

Если нет, моя идея состоит в том, чтобы JSON сортировать все столбцы поиска и вставлять их в один. Таким образом, я могу полностью искать текст, но все же легко извлекать отдельные столбцы в .NET. Я предполагаю, что у индексатора не будет проблем с этим и обойдется с символами JSON и кавычками. Правильно ли это?

Спасибо

ИЗМЕНИТЬ

Думая о идее JSON, искатель также индексировал имена свойств, поэтому мне пришлось бы переименовать {name}, {details}, {long_details} в нечто вроде {x1}, {x2}, {x3}, чтобы что они не будут выбраны при обыске. Надеюсь, если они будут такими короткими, они не будут индексироваться в любом случае.

EDIT2

Я могу создать Стоп-лист на основе системного стоп-листа и поместить в него имена свойств.

4b9b3361

Ответ 1

Это должно работать:

SELECT * FROM dbo.SearchTable
WHERE CONTAINS((co1, col2, col3, col4), 'term1')
AND CONTAINS((co1, col2, col3, col4), 'term2');

В качестве альтернативы вы можете добавить новый вычисленный столбец с полным текстовым индексом. Добавьте столбец следующим образом:

computedCol AS col1 + ' ' + col2 + ' ' + col3 + ' ' + col4

И создайте полный текстовый индекс:

CREATE FULLTEXT INDEX ON SearchTable (computedCol LANGUAGE 1033)
KEY INDEX pk_SearchTable_yourPrimaryKeyName

Затем вы можете сделать это:

SELECT * FROM dbo.SearchTable
WHERE CONTAINS(*, 'term1 AND term2')