Несколько столбцов с ContainsTable и логической логикой с полнотекстовым индексом
-
05-07-2019 - |
Вопрос
У меня есть, как мне кажется, очень простой сценарий, но то, что я прочитал, звучит так, как будто это нелегко с использованием полнотекстового каталога и индексов SQL Server.
У меня есть 2 столбца: имя и фамилия. Я хочу поддерживать полнотекстовый поиск по ним, чтобы, если кто-то печатает "John Smith" люди с совпадением и первым и последним появляются первым.
Несмотря на то, что легко создать индекс по нескольким столбцам и легко искать по нескольким столбцам, оценка не отражает несколько столбцов.
SELECT [Key], Rank
FROM CONTAINSTABLE([User], (FirstName,LastName), '<CLAUSE_HERE>')
<Ол>
Похоже, что единственное решение состоит в том, чтобы автоматически генерировать запрос, который запускает containstable
для каждого поля, выполняет некоторые математические операции, суммирует оценки и т. д. Это звучит правильно? Есть ли более простой способ обойти это? У моего фактического запроса гораздо больше полей - это упрощенный пример.
Решение
Создайте вычисляемый столбец , который объединяет поля, которые вы Вы заинтересованы в поиске (таким образом, который имеет смысл для ваших форматов поиска) и полнотекстовом индексе.
Насколько мне известно, это единственная возможность, если вы хотите сделать полный текст таким образом из-за поведения, которое вы описали в своем вопросе.
Другие советы
Вам нужно было бы проверить это, но мне интересно, сможете ли вы использовать функцию ISABOUT (), чтобы применить вес к каждому ключевому слову. Ваше условие поиска может выглядеть примерно так:
ISABOUT(john weight(0.2), smith weight(0.8))