2012-06-03 58 views
1

我正在嘗試確定所有可能的單詞旁邊有一個全文索引的列中的單詞。如何獲取單詞旁邊的單詞

我使用sys.dm_fts_index_keywords來獲取所有可能的關鍵字,忽略所有在停止列表中的單詞。

我試圖弄清楚的一個例子: 如果我有字符串:「我喜歡我的辦公室的咖啡廳」,我正在看「咖啡館」一詞,我想知道下一個字它是。

當我在下一步搜索時,是否包含停止列表單詞並不重要。我只是認爲利用已經存在的全文索引會更容易。

回答

2

您可以使用FT索引查找匹配,但是您必須解析短語並找到相鄰的單詞。不幸的是,FTS不會給你比賽afaik的位置,否則這可能會更容易。

下面是一個例子設置:

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 [email protected]