Как получить результаты поиска по аналогии с поисковыми системами?
От: icomp  
Дата: 23.06.15 10:36
Оценка:
Здравствуйте, коллеги!
Нужен совет.

Есть база с документами pdf, doc, docx и т.д. (на SQLServer 2012)
По документам организован полнотекстовый поиск.
Соответственно, используется FileStream и прикручены фильтры: Adobe PDF IFilter и FilterPack64bit для документов офиса.
При запросе с помощью CONTAINS или FREETEXT я получаю список документов, содержащих искомую фразу или слово.

Вопрос вот в чем: а можно ли получить результаты поиска по аналогии с поисковыми системами, то есть, показывать выдержки из текста?
То есть, нужно в документе найти строку, которая содержит искомое слово.
Взять эту строку, прибавить предыдущую строку и последующую, и эти три строки показать пользователю в результатах запроса.
Как это сделать?
Может, есть какие-то готовые библиотеки или сервисы?
sql server
Re: Как получить результаты поиска по аналогии с поисковыми системами?
От: AndrewN Россия  
Дата: 25.06.15 23:30
Оценка:
Здравствуйте, icomp, Вы писали:

I>Здравствуйте, коллеги!

I>Нужен совет.

I>Есть база с документами pdf, doc, docx и т.д. (на SQLServer 2012)

I>По документам организован полнотекстовый поиск.
I>Соответственно, используется FileStream и прикручены фильтры: Adobe PDF IFilter и FilterPack64bit для документов офиса.
I>При запросе с помощью CONTAINS или FREETEXT я получаю список документов, содержащих искомую фразу или слово.

I>Вопрос вот в чем: а можно ли получить результаты поиска по аналогии с поисковыми системами, то есть, показывать выдержки из текста?

I>То есть, нужно в документе найти строку, которая содержит искомое слово.
I>Взять эту строку, прибавить предыдущую строку и последующую, и эти три строки показать пользователю в результатах запроса.
I>Как это сделать?
I>Может, есть какие-то готовые библиотеки или сервисы?

Одна из самых популярных опенсорс библиотек — Sphinx (http://sphinxsearch.com/)
А ключевое слово для выдержек из текста применительно к Sphinx: "snippets"
--------------------------------------------------------------
Правильно заданный вопрос содержит в себе половину ответа
Re[2]: Как получить результаты поиска по аналогии с поисковыми системами?
От: icomp  
Дата: 02.07.15 16:59
Оценка: 14 (1)
Я наткнулся еще на одну интересную библиотеку ThinkHighlight for SQL Server http://www.interactivethoughts.com/products/thinkhighlight/
Она правда не бесплатная, но функции — как раз то, что нужно: умеет генерировать выдержки из текста и может работать напрямую с Pdf через IFilter
Никто случайно не пользовался? Где там грабли, куда наступать?
Re[3]: Как получить результаты поиска по аналогии с поисковыми системами?
От: Olaf Россия  
Дата: 03.07.15 06:32
Оценка:
Здравствуйте, icomp, Вы писали:

I>Я наткнулся еще на одну интересную библиотеку ThinkHighlight for SQL Server http://www.interactivethoughts.com/products/thinkhighlight/

I>Она правда не бесплатная, но функции — как раз то, что нужно: умеет генерировать выдержки из текста и может работать напрямую с Pdf через IFilter
I>Никто случайно не пользовался? Где там грабли, куда наступать?

А вы сами пробовали ее использовать? Я технически не могу понять, как это будет работать на FILESTREAM, т.е. что предлагает библиотека. Встроенный FTS выполняет поиск по содержимому, но он возвращает в результате сам файл, а не строки, в которых были найдены значения. А вам требуется извлечь содержимое неструктурированных данных (pdf, word, excel), которые были найдены через FTS.

Если просто фантазировать, то вашу задачу можно было бы попытаться решить через CLR функцию, где в качестве аргумента выступает blob или ссылка на него и строка поиска. Но есть некоторые вопросы и сомнения:
1. Неструктурированные данные (pdf, excel, word и прочее) какой-то сторонней библиотекой преобразовать к текстовому виду (а может и не стОит?!)
2. По содержимому, полученному в п. 1 или напрямую выполнить поиск, но как его сопоставить с алгоритмами поиска FTS.
Re[4]: Как получить результаты поиска по аналогии с поисковыми системами?
От: Olaf Россия  
Дата: 03.07.15 08:51
Оценка:
Здравствуйте, Olaf, Вы писали:

O>А вы сами пробовали ее использовать? Я технически не могу понять, как это будет работать на FILESTREAM, т.е. что предлагает библиотека. Встроенный FTS выполняет поиск по содержимому, но он возвращает в результате сам файл, а не строки, в которых были найдены значения. А вам требуется извлечь содержимое неструктурированных данных (pdf, word, excel), которые были найдены через FTS.


Я невнимательно посмотрел. Ребята реализовали приложение, которое позволяет подключиться к БД и установить на ней CLR сборку с функциями. Ну а дальше дело техники..
DECLARE @query nvarchar(50) = '"Microsoft"'
DECLARE @context varbinary(8000) = dbo.HitHighlightContext('doc', 'content', @query, -1)
SELECT TOP 10 doc_id, dbo.HitHighlight(@context, 'top-fragment', 200, doc_id)
FROM doc
WHERE CONTAINS(content, @query)

Очень интересно узнать, как они реализовали поиск внутри функции. Ну и стоит опробовать ее на FILETABLE/FILESTREAM.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.