返回全文搜索中找到的短语的周围文本,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的主要内容,如果未能解决你的问题,请参考以下文章