Можно ли получить информацию, почему / каким образом данная строка, возвращенная запросом FTS, была сопоставлена (или какая подстрока вызвала совпадение строки)?
Например, рассмотрим простейшую таблицу со столбцами id
и text
, с индексом FTS для более поздней.
SELECT * FROM Example
WHERE CONTAINS(text, 'FORMSOF(INFLECTIONAL, jump)');
Этот примерный запрос может вернуть, скажем, строку {1, 'Jumping Jack'}
.
Теперь, возможно ли каким-то образом получить информацию, что этот самый ряд был найден из-за слова 'Jumping'
? Это даже не должна быть точная информация, скорее , подстрока которой вызвала совпадение строки .
Почему я спрашиваю - у меня есть приложение C #, которое создает эти запросы на основе пользовательского ввода (ключевые слова для поиска), и мне нужна самая базовая информация, почему / как сопоставляется строка, для дальнейшего использования в коде C # ,
Если это невозможно, есть альтернативы?
РЕДАКТИРОВАТЬ в отношении ответов Майка Бертона и LesterDove:
Приведенный выше пример был тривиальным по очевидным причинам, и ваши решения в порядке, если учесть это, однако FTS-запросы могут возвращать результаты, в которых регулярное выражение или простое сопоставление строк (например, LIKE
) не будут включены. Учтите:
Поиск bind
возвращает bound
(прошлая форма).
Поиск extraordinary
возвращает amazing
(синоним).
Оба действительных совпадения.
Я искал решения этой проблемы и нашел это: NHunspell . Тем не менее, я уже получил FTS и действительные результаты с использованием SQL Server, дублирующий аналогичный механизм (создание дополнительных индексов, хранение дополнительных слов / файлов тезауруса и т. Д.) Выглядит не очень хорошо.
Однако ответ Лестера дал мне некоторые идеи о том, что, возможно, я действительно смогу разбить исходную строку на временную таблицу и выполнить исходный запрос FTS для этого результата разбиения. Поскольку это может работать для моего случая (когда БД довольно мала, а запросы не очень сложны), в общем случае такой подход может быть вне вопроса.