Полнотекстовый поиск в SQL Server 2008 FileStream - PullRequest
3 голосов
/ 18 января 2011

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

Tbl_FileStream содержит сотни тысяч файлов, от PDF до JPG и TXT.

Кроме того, Tbl_FileStream имеет полнотекстовый индекс, созданный для FileStream.Полнотекстовый индекс работает великолепно, и у меня есть хранимая процедура, которая выполняет полнотекстовый поиск по нему (используя CONTAINSTABLE и RANK), и он также отлично работает.

Однако я нахожусь в расстроенном положении сОтносительно того, что полнотекстовый поиск может вернуть мне, когда он получает удар при поиске в FileStream.Например, мы должны искать фразу «et dolore», тогда мой поиск даст результаты, которые показывают, что 59 документов соответствуют поисковому запросу.Конечно, я могу получить названия документов, которые были найдены как совпадающие, потому что я храню заголовки документов в Tbl_FileStream, , но мне действительно нужно, чтобы текст, окружающий поисковый термин, находился внутри фактического файла .

Например, предположим, что у меня есть текстовый документ со следующим латинским - Lorem Ipsum Dolor Sit Amet, Contetur Sadipscing Elitr, Sed Diam Nonumy Eirmod Tempor Invidunt Ut Labore et Dolore Magna Aliquyam Erat, Sed Diam Volptua.В vero eos et accusam и justo duo dolores и ea rebum.Stet clita kasd gubergren, нет моря takimata sanctus есть Lorem ipsum dolor sit amet.

Используя возможность полнотекстового поиска в SQL Server, если бы мне пришлось искать слова «et dolore», то мне действительно нужно было вернуть произвольное количество слов (10 или около того), идущих по поисковому запросубыл найден в документе, так что я на самом деле получал такую ​​фразу, как "... sed diam nonumy eirmod tempor invidunt ut labore et dolore ...".

И дляте, кто задаются вопросом, почему в мире кто-то хотел бы сделать это, причина в том, что потребитель хочет быстро взглянуть на контекст, в котором поисковый термин был найден в каждом обращении.Другими словами, они хотят быстро просмотреть результаты поиска и попытаться увидеть, какой из попаданий документа, вероятно, содержит то, что они ищут.

Возможно ли это сделать в SQL Server2008?

Если нет, то есть ли какие-нибудь бэкэнды, поддерживающие это?

Заранее благодарен за все предложения и помощь, которые я получаю при этом трудномтема.

Ответы [ 2 ]

1 голос
/ 20 января 2011

Использование только SQL Server 2008

Если вы придерживаетесь SQL Server 2008, вам придется хранить текстовое содержимое каждого файла в базе данных, в которой вы хотите выполнить поиск.Это означает, что для типов файлов изображений вам придется использовать программу OCR для файла и хранить копию текста в базе данных, чтобы его можно было искать.Это также означает, что вам придется перепрыгивать через обручи, если по какой-либо причине содержимое целевого файла превышает 2 ГБ.

Итак, давайте предположим, что в вашей таблице метаданных файла есть следующий столбец, например:

TextContents nvarchar(max) null.

Затем мы можем извлечь контекст, используя что-то похожее на:

Declare @SearchTerm nvarchar(max)
Declare @MaxResultTextLen int

Set @SearchTerm = 'et dolore'
Set @MaxResultTextLen = 100

Select  CharIndex(@SearchTerm, F.TextContents),
    Case 
    When CharIndex(@SearchTerm, F.TextContents) <= @MaxResultTextLen 
        Then Substring(F.TextContents, 1, @MaxResultTextLen) + '...'
    Else Substring(@SearchTerm
        , CharIndex(@SearchTerm, R.TextContents) 
                - @MaxResultTextLen + Len(@SearchTerm)
        , @MaxResultTextLen) + '...'
    End As TextContext
From Files As F
Where Contains(F.TextContents, @SearchTerm)

Использовать стороннюю поисковую систему

Решениеэто приближается к тому, чего вы хотите достичь - использовать стороннюю поисковую систему, которая будет возвращать контекст с найденным поисковым термином.Однако, опять же, файлы изображений и PDF-файлы с изображениями должны быть OCR-файлами, чтобы механизм мог искать текстовое содержимое.Делая быстрый поиск на одном движке с именем dtSearch (я не использовал и не работал для них), я вижу, что он предоставляет возможность отображать «выделенные совпадения», означающие отображение контекста найденного термина в файле для пользователя.

dtSearch

0 голосов
/ 20 января 2011

К сожалению, то, что вы ищете, нелегко сделать с помощью текущих версий Sql Server.

...