全文搜索用于提取文本片段(返回预期文本及其周围)

Posted

技术标签:

【中文标题】全文搜索用于提取文本片段(返回预期文本及其周围)【英文标题】:Full Text Search for extracting a snippet of the text (returning intended text and it's surrounding) 【发布时间】:2018-08-14 09:58:52 【问题描述】:

我正在使用 SQL 文件表,例如我有一个名为“SOS.txt”的已保存文本文件,其中包含以下文本

For god's sake, save us right now please. We can't survive. Now or never!

现在我想查找所有包含单词save的文件,所以我执行以下查询

SELECT * FROM FileTableExample
WHERE CONTAINS(file_stream, 'save') 

结果如下:

stream file => 0x616C692053617665207573207269676874206E6F772E0D0A4E6F77206F72206E6576657221

如您所见,我得到了真实的结果,结果的第三列表示名称为 SOS.txt 的文件,我有 stream_id 和 stream_file 但我要找到的是显示预期的方式文本与周围环境一起以人类可读的格式显示。 像这样的:

   Name      |     Excerpt
-------------+----------------------
 SOS.txt     |..sake, save us..

有什么办法吗?

更新:

在网上搜索后发现this的文章很有用,但没有提到文件表结构中的全文搜索。

根据this的文章,我将文件流转换为字符串:

SELECT CONVERT(varchar(MAX), file_stream) AS Excerpt, *
from FileTableExample
where contains(file_stream, 'save')

如果文件是像 SOS.txt 这样的纯文本文件,它可以工作,但如果它是 .docx 或 .pptx 文件,您将不会获得有用的约定。

【问题讨论】:

您是否启用了全文搜索? 是的,我愿意,这就是为什么我可以在纯文本文件、Word、PowerPoint、Excel 等办公文档和 PDF 文件中进行搜索,这要归功于 iFilters。 【参考方案1】:

使用这个,CAST(file_Stream as varchar(max))

【讨论】:

问题依然存在,当文件为office文档或PDF文件时,不返回true转换。就我而言,转换结果是 PK + 3 个奇怪的字符。

以上是关于全文搜索用于提取文本片段(返回预期文本及其周围)的主要内容,如果未能解决你的问题,请参考以下文章

从全文搜索结果中提取小的相关位文本(如 Google 所做的那样)

PDF文本内容批量提取到Excel

文本分类

文本分类

如何增加 Sqlite FTS4 片段大小

以编程方式搜索 PDF 文件中的文本并告知页码? [关闭]