Функция TSQL для разбора текста по ключевым словам? - PullRequest
1 голос
/ 07 июня 2011

Мне нужна помощь в создании функции релевантности текста с использованием списка ключевых слов, который входит в состав SQL Server 2008, и я выполняю поиск в свободном тексте, который возвращает список строк таблицы.

Для каждогострока, я хочу функцию, скажем "ParseForKeywords (result, listOfKeywords) AS Parsed Result", чтобы построить новую строку, основанную на поле результата:

listOfkeywords будет списком слов с запятой или пробелом.

Если результат больше, чем, скажем, 100 слов, сделайте следующее: Найдите первое вхождение любого из ключевых слов, вычтите 5 или 6 слов и начните с него новую строку для длины строки результата..

Если результат превышает 200 слов, выполните те же действия, что и выше, для следующих 50 слов, затем найдите следующее вхождение любого из ключевых слов, минус 5 или 6 слов, и добавьте "... ".

То, что я ищу, - это отправная точка, и несколько советов о том, где эта логика будет лучше всего размещена: на SQL Server, или позвольте .Net коду делать тего при заполнении ячейки DataTable?

Если делать это в функции TSQL: я бы начал с создания курсора или CTE для циклического перемещения по списку слов, разделенных запятыми.На каждом проходе.Чтобы найти первое вхождение любого из слов, мне нужно было бы перебрать количество ключевых слов, чтобы найти наименьшее значение CHARINDEX ().

Есть ли способ сделать WHERE IN ('word1', 'word2', 'word3') ??

Как только это будет найдено, я бы вычел x # символов из этогоЗначение charindex, пока я не считаю, 4 пробела.Мне также необходимо выяснить, встречается ли какое-либо из этих слов позже в тексте, после чего весь процесс будет повторяться.

Если посмотреть на это сейчас, для этого потребуются как минимум две функции.

Спасибо.

Ответы [ 3 ]

1 голос
/ 08 июня 2011

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

Это более простая реализация, но она будет работать плохо, если вы будете публиковать результаты, так как ParseForKeywords будет запускаться для всех результатов.

Вариант 2: Создайте функцию CLR и запустите ParseForKeywords в запросе.

Это может сделать вашу архитектуру немного сложнее, но это будет работать намного лучше при разбивке по страницам результатов.

1 голос
/ 08 июня 2011

Для такой задачи лучше всего подойдет CLR StoredProcedure.В интернете много примеров и руководств.

0 голосов
/ 08 июня 2011

SQL на самом деле очень плохое место для анализа текста по ключевым словам, если вы не используете полнотекстовое индексирование.Вот хороший обзор:

http://www.simple -talk.com / sql / Learn-SQL-сервер / понимание полнотекстовой индексации в SQL Server /

Без создания полнотекстового индекса ваши запросы должны анализировать каждую строку, по которой выполняется поиск, линейно, что делает эту операцию потенциально очень медленной, особенно если у вас есть много строк для поиска.Опция заключается в использовании пакета, такого как lucene, и поиск по всему тексту вне базы данных.

...