Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Хитрый FTS с упорядочиванием по колонкам  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Всем доброе время суток!

Есть процедура, исользующая containstable.

Причём она ищет по нескольким полям, хотя по факту там одно Computeted column (пока не суть важно, а потом вернёмся).

Появилась необходимость что бы поиск по одним колонкам был приоритетнее.

Первая идея - это сделать поиск по всем, а потом приджойнить LEFT-ом ещё поиск по приоритетной и начинать упорядочивать по её Rank (И её более тормознутые вариации).

Потом появилась костяльная мысль в вычисляемой колонке продублировать несколько раз более приоритетную колонку.

Далее возникла мысль (я плохо знаю синтаксис строки поиска ФТС до сих пор) а нельзя ли сделать так вычисляемую колонку, в каком-нить формате что бы чётко указывать потом "вес" или подстроится под алгоритм поиска....

Ну не знаю

1) логика в духе
<<<
select top 100
'column1=[' + column1+ ']
column2=[' + column2+ ']
column3=[' + column3+ ']
column4=[' + column4+ ']'
from dbo.Table1
>>>

2) или вообще каждое слово в колонке "обернуть" или имя колонки рядом поставить в духе
column1 word1_col1 column1 word2_col1
column2 word1_col1

и т. п. что бы потом можно было каую-то смесе WEIGHT/NEAR явно задавать.

Заранее спасибо за идеи )
4 ноя 15, 14:35    [18368836]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый FTS с упорядочиванием по колонкам  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Конкретнее можно?

какой запрос использует containstable?
как вы используете FTS на computed колонке?
структуру приведите
4 ноя 15, 15:20    [18368948]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый FTS с упорядочиванием по колонкам  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Winnipuh,

Winnipuh
Конкретнее можно?

Вопрос общий.

Сейчас на вычисляемой колонке просто конкатинация колонок по которым надо делать поиск (так проще поддерживать было и есть два варианта поиска по разному набору колонок и только из-за этого были созданы).

Но вопрос мой обобщён и не привязан к мой лично задаче.

Вопрос именно сделать по-умному сортировку задав приоритет кокой-то колонке БЕЗ лиших джойнов других ФТС-ов зная либо хитрый алгоритм расчёта RANK либо создав вычисляемый столбец с логикой которая потом помощет сделать такое условие что если совпадение по нужной колонке, то приоритет больше.

Например ограничемся что ищем по дному слову searchWord и у нас есть две колонки Сol1 и Col2

В вычисляемой колонке мы записываем слова добавляе (в конце для примера) к каждому слову из исходной колонки - имя колонки,

Т.е. если в первой колонке были значение Val1, Val2, Val3
А во второй только Val3

То станут в вычисляемой Val1_Col1, Val2_Col1, Val3_Col1, Val3_Col2

Может даже с дублежом изначальных значений Val1, Val2, Val3 Val3 (А может и нет, я не знаю).


Потом в условиях поиска напише что-то в духе ISABOUT("Val2*", "Val2_Col2" WEIGHT (0.9), "Val2_Col1" WEIGHT(0.1))
потому что в случае "успеха" хотим в первую очередь упорядочить по 2ой колонке, хотя ищем по-обоим.

какой запрос использует containstable?

Ммм... очевеидно СКЛ-запрос.
Банальный Джойн CONTAINSTABLE и второй таблицы с
order by a.RANK desc
потом вот и всё.
Просто приоритет одной колонки хочу повысить. Одна из идей - вычисляемй стоблец с хитрым алгоритмом текстовой конкатенации.

Winnipuh
как вы используете FTS на computed колонке?

Добавли в ФТС индекс и испольщую как обычно.

Winnipuh
структуру приведите

Чего структуру и к чему?!


Так же идея была - гарантировать что каждой слово встречается только один раз в тексте, а для "более важных" колонок - просто повторять значения в конактенированной
что-то типа

columen1 + column2 + column2 + column3, если авторая важнее или вообще сначала тупо всё уникальное, а потом повторить уникальные слова второй колонки.
4 ноя 15, 15:53    [18369041]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить