Несколько столбцов с ContainsTable и логической логикой с полнотекстовым индексом - PullRequest
9 голосов
/ 26 ноября 2009

У меня есть, как мне кажется, очень простой сценарий, но то, что я прочитал, звучит так, как будто это нелегко, если использовать полнотекстовый каталог и индексы SQL Server.

У меня есть 2 столбца, Имя и Фамилия. Я хочу поддержать полнотекстовый поиск по ним так, чтобы, если кто-то печатает «Джон Смит», люди с совпадением на и в первую очередь и в последнюю очередь появляются в первую очередь.

Несмотря на то, что легко создать индекс по нескольким столбцам и легко искать по нескольким столбцам, оценка не отражает несколько столбцов.

SELECT [Key], Rank 
FROM CONTAINSTABLE([User], (FirstName,LastName), '<CLAUSE_HERE>')
  1. Если CLAUSE_HERE - "Джон Смит", я не получаю результатов, потому что эта фраза не существует ни в одном из полей.
  2. Если это "Джон ИЛИ Смит", я получаю всех пользователей с любым именем в любом поле, отсортированных в бесполезном порядке.
  3. Если это "Джон И Смит", я не получаю результатов, потому что ни одно из полей не содержит обоих слов.

Похоже, что единственным решением является автоматическое создание запроса, который запускает containstable для каждого поля, выполняет какие-то математические операции, суммирует оценки и т. Д. Это звучит правильно? Есть ли более простой способ обойти это? У моего фактического запроса гораздо больше полей - это упрощенный пример.

Ответы [ 2 ]

11 голосов
/ 26 ноября 2009

Создайте вычисляемый столбец , который собирает воедино поля, по которым вы хотите искать (таким образом, который имеет смысл для ваших форматов поиска), и полнотекстовый индекс, который.

Насколько я знаю, это единственный обходной путь, если вы хотите сделать полный текст таким образом из-за поведения, которое вы описали в своем вопросе.

0 голосов
/ 26 ноября 2009

Вам нужно было бы проверить это, но мне интересно, сможете ли вы использовать функцию ISABOUT (), чтобы применить вес к каждому ключевому слову. Ваше условие поиска может выглядеть примерно так:

ISABOUT(john weight(0.2), smith weight(0.8))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...