2009-04-08 5 views
3

私はcontains述語を使用して、SQL Serverのインデックス付きテキストフィールドでフレーズを検索しています。検索されたフレーズを含むテキストフィールドの一部、またはその周辺の領域を返す方法はありますか?全文検索で見つかったフレーズの周囲のテキストを返す、SQL 2005

たとえば、Gettysburgのアドレス(以下抜粋)で「すべての男性が平等に作成されました」と検索している場合は、「すべての男性が平等に作成されているということに専念しています。その周りのテキスト

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. 

答えて

2

私は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文字より長い文字列を返すので、そのようなことは動作するはずです。

0

これと似たようなことを達成しようとしている間、ちょうど遭遇しました。セブの応答のオフビルは、私たちの問題を解決するために、次の実装:

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

これは、150の文字が先行するキーワードやフレーズを返します。合計で350文字が返されます。必要に応じてそれらの番号を変更します。また、このコードは単語の途中での破損を避けることに対応していないため、楕円は最初と最後に含まれています。

関連する問題