2013-06-19 42 views
5

我們有一個支持不同語言的網站。我們有數百萬的數據,因此在搜索中我們想實施SQL Server Full-Text Search如何在SQL Server的多語言內容中實現全文搜索

我們目前在下面的表結構。

CREATE TABLE Product 
(
    ID INT IDENTITY(1,1), 
    Code VARCHAR(50), 
    ........ 
    ........ 
) 

CREATE TABLE ProductLanguage 
(
    ID INT, 
    LanguageID INT, 
    Name NVARCHAR(200), 
    ........ 
    ........ 
) 

我們希望在「名稱」列中實現全文搜索,因此我們在名稱列上創建了全文索引。但是,在創建全文索引時,我們只能爲每列選擇一種語言。如果我們選擇「英文」或「中性」,它不會返回其他語言(如日語,中文,法語等)中的預期數據。

那麼在SQL Server中實現多語言內容的全文搜索的最佳方式是什麼?

我們是否需要創建一個不同的表格。如果是,那麼表格結構是什麼(我們需要記住語言不固定,以後可以添加不同的語言)以及什麼是搜索查詢?

我們正在使用SQL Server 2008 R2。

+0

即使這可能不適合這種變化的時候,對於未來,你應該考慮使用像Lucene的,Elasticsearch,Xapian的一個真正的搜索引擎。根據我的經驗,對數據庫進行全文搜索會導致客戶提出越來越多的設計要求,而不是針對這些數據庫。 – 0xCAFEBABE

+0

請參閱http://stackoverflow.com/questions/3492405/how-do-i-do-a-full-text-search-in-sql-server-2008-where-the-data-contains-multip –

回答

2

某些內容(文檔)類型支持語言設置 - 例如, Microsoft Office文檔,PDF,[X] HTML或XML。

如果將Name列的類型更改爲XML,則可以確定每個值(即每行)的語言。例如:

不是存儲值作爲字符串

name 1 
name 2 
name 3 

的......你可以將它們與適當的語言聲明保存爲XML文檔:

<content xml:lang="en-US">name 1</content> 
<content xml:lang="fr-FR">name 2</content> 
<content xml:lang="en-UK">name 3</content> 

在全文索引人口根據每個值(XML文檔)的語言設置使用正確的分詞器/詞幹分析器:名稱1,法語或名稱2的美國英語和名稱3的英國英語。

當然,這需要您的數據管理和使用方式發生重大變化。

ML

+0

Matija Lah - 它是否覆蓋了現有的語言設置(我在創建列上的Ful-Text索引時選擇的語言設置)? –

0

我會擔心使用XML,而不是NVARCHAR(ñ)的表現 - 雖然我自己也沒有硬證據。 一種替代方案可以是使用動態SQL(即時生成特定於語言的代碼),並結合Product表上的語言特定索引視圖。 thsi的缺點是缺乏執行計劃緩存,即:性能。

0

與Matija Lah的回答相同,但這是MS白皮書中概述的建議解決方案。

  • 當索引內容是二進制類型(如微軟的Word 文件),該IFilter的負責處理文本內容 其發送到斷字前可能的榮譽,在特定的語言 標籤二進制文件。在這種情況下,在編制索引時, iFilter爲特定文檔調用正確的分詞符或以特定語言指定的文檔的 部分。在這種情況下,您需要執行的所有操作都是在索引後驗證多語言 內容是否已正確編制索引。用於Word,HTML和XML過濾器 文件履行在文檔內容語言規範屬性:
    1. 字 - 語言設置
    2. HTML - <meta name=「MS.locale」…>
    3. XML - xml:lang屬性
  • 當你的內容純文本,您 可以將其轉換爲XML數據類型,並添加特定語言標籤到 指示對應於該特定文檔的語言或 文件部分。請注意,爲此,在索引之前, 必須知道將使用的語言。

https://technet.microsoft.com/en-us/library/cc721269%28v=sql.100%29.aspx