1

助けていただけませんか。t-sql式が次の理由を理解してください。

  DECLARE @SearchWord varchar(max)
SET @SearchWord = '"I went to primary school in London "'
SELECT * FROM sys.dm_fts_parser('FormsOf(INFLECTIONAL, '+ @SearchWord + ')', 1033, 0, 0) 
where display_term in 
( SELECT display_term FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "go to school")', 1033, null, 0) )

戻り値

ここに画像の説明を入力してください

その間

DECLARE @SearchWord varchar(max)
SET @SearchWord = '"I went. to primary school in London "'
SELECT * FROM sys.dm_fts_parser('FormsOf(INFLECTIONAL, '+ @SearchWord + ')', 1033, 0, 0) 
where display_term in 
( SELECT display_term FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "go to school")', 1033, null, 0) )

戻り値

ここに画像の説明を入力してください

つまり、検索文字列のどこかに1つのドットが追加されると、対応するオカレンスが8桁シフトしますか?dotまたは多分私のt-sql式に何か問題がありますか?前もって感謝します!

4

2 に答える 2

2

まず、ドキュメントには、位置ではなく順序occurrenceを示していると記載されています。つまり、値は絶対値ではなく相対値である可能性がありますが、それでも順序は正しく表示されます。

次に、観察により、番号の最初の桁はゼロベースの文番号を示します(先行ゼロがない最初の文を除く)。「ドット」は実際には終止符であり、英語で文を終了します。したがって、それについて何か重要なことがあるのは当然のことです。このクエリからの出力を見ると、「文の終わり」の特別な用語が表示されます。

DECLARE @SearchWord varchar(max) = N'"I went. to primary school in London. it was a nice school. to go there was fun"'
SELECT * 
FROM sys.dm_fts_parser('FormsOf(INFLECTIONAL, '+ @SearchWord + ')', 1033, 0, 0)

次に、長い文でクエリを見ると...

DECLARE @SearchWord varchar(max) = N'"I went. to primary school in London. it was a nice school. to go there was fun"'
SELECT * 
FROM sys.dm_fts_parser('FormsOf(INFLECTIONAL, '+ @SearchWord + ')', 1033, 0, 0)
where display_term in 
(SELECT display_term FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "go to school")', 1033, null, 0))

occurrence...文1と2の場合、これは確かに単語の位置でもあることがわかりますが、文3と4の場合はそうではありません。なぜこれが起こるのか私にはわかりませんし、それを説明するドキュメントには何もありませんが、ドキュメントにはoccurrenceそれが位置と同じことであるとは書かれていないので、まったく驚くことではありません。

これらの質問も興味深いかもしれません:

于 2013-02-11T20:19:53.330 に答える
0

@PondlifeがPATINDEX()を使用して位置(オカレンスではない)を見つけることを提案したので、私は。で前述の問題を克服することができましたdm_fts_parser@SearchWord以下のt-sqlは、ドットが含まれているかどうかに関係なく、特定のテキスト内のすべての一致フォーム(INFLECTIONAL)の正確な位置と長さを返します。

DECLARE @SearchWord nvarchar(max)

SET @SearchWord = N'"I went. to primary school in London "'

SELECT distinct y.pos,y.lgth from 
(
SELECT w.*,
PATINDEX(N'%[^a-z]' + w.Display_Term + N'[^a-z]%',@SearchWord) as pos, LEN(w.display_term) as lgth
 FROM sys.dm_fts_parser(N'FormsOf(INFLECTIONAL, '+ @SearchWord + ')', 1033, 0, 0) w 
where display_term in 
( SELECT display_term FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "go to school")', 1033, 0, 0) ) and 
PATINDEX(N'%[^a-z]' + w.Display_Term + N'[^a-z]%',
@SearchWord)<>0
) y

そしてそれは以下の結果セットを返します:

ここに画像の説明を入力してください

于 2013-03-11T10:21:58.833 に答える