2012-06-03 2 views
1

전체 텍스트 색인이있는 단어의 단어 옆에 가능한 단어를 모두 찾으려고합니다.단어 옆에있는 단어를 얻는 방법

나는 stoplist의 모든 단어를 무시하고 가능한 모든 키워드를 얻기 위해 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] 
: 여기

은 예시이며 설치
관련 문제