2016-06-20 2 views
1

У меня есть куча статей в одной таблице, которые я бы хотел запросить для результатов поиска. Использование полнотекстового поиска Я могу вернуть список элементов, которые имеют ключевые слова для поиска «рядом» друг с другом.Множественный поиск по полнотекстовому поисковому запросу SQL-запросы объединены и оценены (ранжированные результаты поиска)

Полнотекстовый поиск, по-видимому, не позволяет использовать тезаурус (FORMSOF) с разделителем NEAR.

Что бы я хотел сделать в SQL, это создать запрос или несколько запросов, которые по-разному ищут одни и те же данные и возвращают оценку (или RANK при использовании полнотекстового поиска), то я хотел бы объединить эти результаты, чтобы не было дубликатов, и суммировать ряды/баллы, чтобы я мог ЗАКАЗАТЬ эти оценки.

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

Каков наилучший способ выполнения этих требований?

ответ

0

Полнотекстовый поиск может выполнять поиск как ('"word*" near "another*"') в CONTAINSTABLE заявление. Звездочка поможет найти любые слова, начинающиеся с 'word' и 'another' рядом друг с другом с ранжированием.

С другой стороны вы можете запустить FORMSOF(Thesaurus, word) AND FORMSOF(Thesaurus, another) с помощью CONTAINSTABLE.

Затем ВЫПОЛНИТЕ результаты и используйте ORDER BY для сортировки обоих заданных RANK.

+0

Благодарим за информацию. Я некоторое время застрял в этом, но понял, что могу писать конкретные запросы для разных результатов поиска, например, один набор результатов для слова «рядом» с «другим», а затем formsof (тезаурус, слово) путем выполнения вложенных запросов которые являются UNION'd, а затем группируются по результатам и SUM'ing всего RANK. Это может быть не самое элегантное решение, но оно масштабируемо и работает быстро. – TattooedGun

+0

Мое удовольствие! Отлично, если это помогает и отлично, что вы найдете решение! – gofr1

Смежные вопросы