返回全文搜索中找到的短语的周围文本,SQL 2005

Posted

技术标签:

【中文标题】返回全文搜索中找到的短语的周围文本,SQL 2005【英文标题】:Return surrounding text for phrase found in full-text search, SQL 2005 【发布时间】:2010-10-18 08:14:58 【问题描述】:

我正在使用包含谓词在 SQL Server 索引文本字段中查找短语。有没有办法返回包含搜索短语的文本字段部分,或者它周围的某个区域?

例如,如果我在葛底斯堡演说中搜索“人人生而平等”(摘录如下),我想返回“致力于人人生而平等的命题”,例如周围有一些文字。

Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that *all men are created equal.*

Now we are engaged in a great civil war, testing whether that nation, or any nation so conceived and so dedicated, can long endure. We are met on a great battle-field of that war. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this. 

【问题讨论】:

【参考方案1】:

好吧,我不熟悉 SQL Server sintax,但您可以在字段内找到该匹配项并为其返回一个子字符串。 伪代码

SELECT
  SUBSTRING(field, MAX(0, STRPOS(field, 'all men are equal' - 20), STRLEN('all men are equal') + 40)
FROM
  yourtable
WHERE
  field CONTAINS 'all men are equal'

有了这个,你只能找到那些包含短语的记录的子字符串的位置,并返回一个长 40 个字符的字符串,所以这样的东西应该可以工作。

【讨论】:

我遇到了一个错误,说'STRPOS' is not a recognized built-in function name。可能是因为它是伪代码而不是真正的代码,如果您共享一个真正的 SQL squery 会更好。【参考方案2】:

在尝试完成类似的事情时偶然发现了这一点。根据 Seb 的回复,我实施了以下措施来解决我们的问题:

SELECT '...' + SUBSTRING(@TextToParse, CHARINDEX(@TheKeyword, @TextToParse)-150, 350) + '...'

这将返回前面有 150 个字符的关键字或短语。总共将返回 350 个字符。根据需要修改这些数字。省略号也包含在开头和结尾,因为此代码不适应避免单词中间的中断。

【讨论】:

以上是关于返回全文搜索中找到的短语的周围文本,SQL 2005的主要内容,如果未能解决你的问题,请参考以下文章

确切的短语在 mongodb 全文搜索中无法正常工作

全文搜索,包含多个确切的短语和排除项

SQL Server - 基于百分比的全文搜索

Sql Server 2005 全文搜索中的噪声词

SQL 包含确切的短语

RavenDB 全文搜索