1

全文索引のある列の単語の隣にある可能性のあるすべての単語を特定しようとしています。

sys.dm_fts_index_keywords を使用して、ストップリスト内のすべての単語を無視して、考えられるすべてのキーワードを取得しています。

私が理解しようとしているものの例: 「オフィスのカフェが好き」という文字列があり、「カフェ」という単語を見ている場合、その隣の単語を知りたいです。

次の検索を行うときに、ストップ リストの単語を含めるかどうかは問題ではありません。すでに設置されている全文索引を活用する方が簡単だと思っただけです。

4

1 に答える 1

2

FT インデックスを使用して一致を見つけることができますが、その後、フレーズを解析して隣接する単語を見つける必要があります。残念ながら、FTS は試合の順位を教えてくれません。

設定例を次に示します。

declare @find varchar(100) = 'cafe';

declare @phrase varchar(100) = 'I like the cafe at my office';

;with 
x(x)
as (    select cast('<w>'+replace(@phrase, ' ', '</w><w>')+'</w>' as xml)
    ),
words(pos, word)    
as  (   select  dense_rank() over (order by n),
                p.n.value('.', 'varchar(100)')
        from x
        cross
        apply x.nodes('/w')p(n) 
    )
select  d.* 
from    words w
cross
apply   (   select  * 
            from    words 
            where   pos in (w.pos-1, w.pos+1)
        )d(pos, word)
where   w.word=@find
于 2012-06-04T07:44:58.580 に答える