【问题标题】:Return surrounding text for phrase found in full-text search, SQL 2005返回全文搜索中找到的短语的周围文本,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. 

【问题讨论】:

    标签: sql search contains partial full-text-search


    【解决方案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 个字符。根据需要修改这些数字。省略号也包含在开头和结尾,因为此代码不适应避免单词中间的中断。

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 2011-04-02
      • 1970-01-01
      • 2020-12-02
      • 2012-08-26
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多