iT邦幫忙

DAY 17
4

MS SQL Server新特性探險:探險代碼 Denali系列 第 17

[Denali 新特性探險17]Semantic Search(2)

這篇介紹 Semantic Search 使用和相關注意事項。
上一篇我大概介紹了Semantic Search功能,也示範了該如何安裝及註冊Semantic Search,
這篇我們繼續來看如何使用Semantic Search及建立所需注意事項。
Semantic Indexes注意事項

  1. 資料庫必須有全文檢索目錄。
  2. 資料表必須有全文檢索索引。
  3. 所選擇的欄位必須已存在文檢索索引。
  4. 所選擇語言必須有支援(透過sys.fulltext_semantic_languages 確認)。
  5. 所選擇欄位資料類型必須有支援。
  6. 如果沒有明確指定語言,那Semantic Indexes將以主要語言和相關語言語意進行統計和擷取。
  7. 所選擇文件類型必須有支援(透過 sys.fulltext_document_types確認)。
  8. 有兩種行為,key phrases 和document similarity ,
    你無法只指定單一行為,但你可以個別使用單一行為進行查詢。

這裡我將利用之前所建立的 FileTable 來示範如何使用Semantic Search
FileTable文件來源

1.建立Semantic Indexes
先確認Semantic Search所支援文件類型

select * from sys.fulltext_document_types
where document_type in ('.pdf','.docx','.doc','.ppt','.pptx')


可以看到文件類型少了.docx、.pptx、pdf。

變更篩選清單
安裝office filter packages(支援.docx 、.pptx)

安裝 Adobe PDF iFilter (支援.pdf)

成功後執行以下TSQL變更篩選清單(參考如何:更改已註冊的斷詞工具和篩選清單 (Transact-SQL))

exec sp_fulltext_service @action= 'load_os_resources', @value= 1
exec sp_fulltext_service 'restart_all_fdhosts';

重新啟動SQL Services後再次確認文件類型

可以看到 docx、pdf和pptx文件類型了。

下面我們繼續來建立全文檢索目錄和Semantic Indexes(1使用SSMS,2使用TSQL)。
建立全文檢索目錄和Semantic Indexes(Using SSMS)

勾選統計語意。


選擇自動變更追蹤。


新增特定全文檢索目錄。


建立成功。

建立全文檢索目錄和全文檢索索引含Semantic Indexes(Using TSQL)

create fulltext index on dbo.Mydocs    
(
name 
language 1028 STATISTICAL_SEMANTICS,    
file_stream   
type column file_type         
language 1028 STATISTICAL_SEMANTICS
)    
key index PK_Mydocs_5A5B77D56E0F5D8F    
on MyFTDocs    
WITH    
change_tracking auto,        
stoplist = system;

確認Semantic Search是否OK

select * from sys.dm_fts_index_population where table_id =OBJECT_ID('dbo.Mydocs') 
select * from sys.dm_fts_semantic_similarity_population where table_id =OBJECT_ID('dbo.Mydocs') 


確認Status=Starting後,我們就可以執行Semantic Search。

使用 semantickeyphrasetable: 查看該FileTable目前全部關鍵詞組

select  keyp.keyphrase
from semantickeyphrasetable    
(    dbo.Mydocs,    file_stream      ) as keyp
order by keyp.score desc


(擷取部分)。

使用semantickeyphrasetable: 搜尋(前30筆)相關文件內容中”效能”詞組。

select top(30) ft.name,ft.cached_file_size,keyp.keyphrase,keyp.score
from dbo.Mydocs as ft inner join semantickeyphrasetable(dbo.Mydocs,(name,file_stream)) as keyp on ft.path_locator=keyp.document_key
where keyp.keyphrase=N'效能' 
order by keyp.score desc 


Score越接近1,表示該關鍵詞組在文件中權重越高(詞組權重演算法可參考 Language model)。

使用 SEMANTICSIMILARITYTABLE : 依所指定的文件來找出相似文件。

declare @mydocid hierarchyid
select @mydocid=path_locator
from dbo.Mydocswhere name=N'善用parallel.doc'
select top(10) ft.name,ft.cached_file_size,keyp.score
from dbo.Mydocs as ft inner join SEMANTICSIMILARITYTABLE(dbo.Mydocs,file_stream,@mydocid) as keyp on keyp.matched_document_key =ft.path_locator
order by keyp.score desc 


Score越接近1,表示該該文件相似度越高。

使用 semanticsimilaritydetailstable: 兩個指定文件中顯示common Key phrase(共同的關鍵詞組)。

declare @mydocid1 hierarchyid
declare @mydocid2 hierarchyid
select @mydocid1=path_locatorfrom dbo.Mydocs
where name=N'善用parallel.doc'
select @mydocid2=path_locator
from dbo.Mydocs
where name=N'交易處理觀念與理論.ppt'
select top(10) keyp.keyphrase, keyp.score
from semanticsimilaritydetailstable(dbo.Mydocs,file_stream,@mydocid1,file_stream,@mydocid2) as keyp order by keyp.score desc 


上一篇
[Denali 新特性探險16]Semantic Search(1)
下一篇
[Denali 新特性探險18]New and Enhanced Query Optimizer Hints
系列文
MS SQL Server新特性探險:探險代碼 Denali30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言