如何获得单词旁边的单词

时间:2012-06-03 23:17:23

标签: sql sql-server-2008

我正在尝试确定列中包含全文索引的单词旁边的所有可能单词。

我使用sys.dm_fts_index_keywords来获取忽略停止列表中所有单词的所有可能关键字。

我想弄清楚的一个例子: 如果我有字符串:“我喜欢我办公室的咖啡馆”,我正在看“咖啡馆”这个词,我想知道旁边的文字。

当我在搜索下一个时,我是否包含停止列表单词并不重要。我只是觉得利用现有的全文索引会更容易。

1 个答案:

答案 0 :(得分: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