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

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

上一篇我大概介紹了Semantic Search功能,也示範了該如何安裝及註冊Semantic Search,

這篇我們繼續來看如何使用Semantic Search及建立所需注意事項。

 

Semantic Indexes注意事項

1. 資料庫必須有全文檢索目錄。

2. 資料表必須有全文檢索索引。

3. 所選擇的欄位必須已存在文檢索索引。

4. 所選擇語言必須有支援(透過sys.fulltext_semantic_languages 確認)。

5. 所選擇欄位資料類型必須有支援(char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max) 都可)。

6. 如果沒有明確指定語言,那Semantic Indexes將以主要語言和相關語言語意進行統計和擷取。

7. 所選擇文件類型必須有支援(透過 sys.fulltext_document_types確認)。

8. 有兩種行為,key phrases 和document similarity ,你無法只指定單一行為,但你可以個別使用單一行為進行查詢。

 

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

FileTable文件來源

image

 

1.建立Semantic Indexes

先確認Semantic Search所支援文件類型

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

image

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

 

接下來,針對相關缺少的文件類型變更篩選清單。

安裝office filter packages(支援.docx 、.pptx)

image

 

安裝 Adobe PDF iFilter (支援.pdf)

image

 

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

--重新載入作業系統篩選和斷詞工具
exec sp_fulltext_service @action= 'load_os_resources', @value= 1
--重新啟動篩選背景程式主機處理序 (fdhost.exe)
exec sp_fulltext_service 'restart_all_fdhosts';

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

image

這時我們可以看到 docx、pdf和pptx文件類型了。

 

上述確認完畢後,下面我們繼續來建立全文檢索目錄和Semantic Indexes(兩種方法1:使用SSMS 2.使用TSQL)。

 

建立全文檢索目錄和Semantic Indexes(Using SSMS)

image

勾選統計語意。

 

image

選擇自動變更追蹤。

 

image

新增特定全文檢索目錄。

 

image

建立成功。

 

建立全文檢索目錄和全文檢索索引含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

--確認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') 

image

Status=Starting 。

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

 

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

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

image

(擷取部分)。

 

使用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 

image

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

 

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

declare @mydocid hierarchyid
select @mydocid=path_locator
from dbo.Mydocs
where 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 

image

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

 

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

declare @mydocid1 hierarchyid
declare @mydocid2 hierarchyid
select @mydocid1=path_locator
from 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 

image