Как я могу заказать полнотекстовый запрос на SQL Server по вхождению текста? - PullRequest
0 голосов
/ 28 августа 2018

Я недавно начал использовать полнотекстовые индексы в системе поиска документов, которую я разрабатываю с SQL Server 2008 R2. У меня есть двоичный файл в одном столбце и вырезанный текст из файла PDF в другом; полнотекстовый индекс находится в текстовом столбце.

Я нашел пустой поиск (вероятно, потому что я не знаю, как сформулировать вопрос), но мне нужно выяснить, как я могу упорядочить результаты по появлению текста. Например, если кто-то ищет строку «книга», я хочу упорядочить запрос, исходя из того, сколько раз «книга» встречается в тексте.

1 Ответ

0 голосов
/ 29 августа 2018

Я бы порекомендовал использовать стороннюю библиотеку для поиска. Хорошая поисковая система - это гораздо больше, чем поиск строк.

При этом я понимаю, что вам все еще может быть полезно реализовать ваш текстовый искатель, как вы указали. Вы можете использовать функцию, чтобы подсчитать, сколько раз встречается подстрока.

Я изменил пользовательскую функцию разделения из Энди Робинсона T-SQL разделенная строка

CREATE FUNCTION dbo.countOfSubString (@source VARCHAR(MAX), @stringToFind VARCHAR(MAX))
RETURNS INT

AS
BEGIN

 DECLARE @name NVARCHAR(255)
 DECLARE @pos INT
 DECLARE @count INT = 0

 WHILE CHARINDEX(@stringToFind, @source) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(@stringToFind, @source)  
  SELECT @name = SUBSTRING(@source, 1, @pos-1)

  SET @count = @count + 1

  SELECT @source = SUBSTRING(@source, @pos+1, LEN(@source)-@pos)
 END

 RETURN @count
END

Затем используйте это, чтобы найти страницу с наибольшим количеством совпадений:

SELECT TOP 1 page_id
    , page_text 
FROM pages
ORDER BY dbo.countOfSubString(page_text, search_text) DESC
...