0

我在SQL-Server中的阿拉伯文全文搜索中遇到問題,此link表示我們可以在全文搜索中使用阿拉伯語。在SQL Server中的阿拉伯語全文搜索

要描述更多,我已啓用包含阿拉伯文和英文文本的其中一列的全文搜索。

當我使用全文搜索英文輸入時,每件事情都可以正常工作,但在阿拉伯語中卻不行。

請注意,我也測試我的查詢與其他表只有阿拉伯文內容,我什麼都沒有。

使用的查詢是這樣的:

select * from tbl where freetext(title, '"*شمس*"')

SELECT * FROM sys.dm_fts_parser('"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', 1025, 0, 0) WHERE special_term <> 'Noise Word' AND display_term IS NOT NULL

+0

如何創建全文目錄和索引? – Backs

+0

@Backs右鍵單擊表格,全文索引,然後定義全文索引,我創建了一個目錄,最後我選擇一個表格的列並單擊下一個按鈕。 (所以我用創建的嚮導菜單) –

+0

如果你有很多的表中的行,它可能需要一段時間來索引...你可以添加整個sql腳本? – Backs

回答

0

我會推薦這種方法:

1)確保您的數據庫列類型爲nvarchar 2)確保您正在將nvarchar值插入列中。

這是一個爲什麼這很重要的小演示。可能你有這個腳本中顯示的問題之一。

CREATE TABLE ftstest (Id int PRIMARY KEY, name varchar(1000), nameA varchar(1000) COLLATE Arabic_BIN, nameN nvarchar(1000)) 
GO 

-- CREATE FTS index for the ftstest table using designer 

INSERT INTO ftstest VALUES(1, N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس"') 
GO 

INSERT INTO ftstest VALUES (2, '"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', '"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', '"الاستنتاجات ونصائح للوقاية من أشعة الشمس"') 
GO 

SELECT * FROM ftstest WHERE CONTAINS(name, N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"') 
SELECT * FROM ftstest WHERE CONTAINS(nameA, N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"') 
SELECT * FROM ftstest WHERE CONTAINS(nameN, N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"') 
SELECT * FROM ftstest WHERE CONTAINS(name, '"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"') 
SELECT * FROM ftstest WHERE CONTAINS(nameA, '"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"') 
SELECT * FROM ftstest WHERE CONTAINS(nameN, '"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"') 

與您的第二個查詢相同的問題。 '' - 表示一個varchar文字,N'' - 表示nvarchar。試試這個查詢來檢查:

SELECT * FROM sys.dm_fts_parser(N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', 1025, 0, 0) 
+0

謝謝你的回答我的第二個查詢操作返回值後,但我的第一個查詢仍然無法正常工作,實際上我需要使用FullTextSearch與阿拉伯語,只是與傳遞شمس我想要獲得الاستنتاجاتونصائحللوقايةمنششعةالشمس,請注意شمس是الشمس的根源。喜歡走是走還是走的根。 –

+0

@ElyasHadizadeh可以通過go *謂詞找到,但這並不意味着通過根搜索,這只是一個通配符搜索。如果你想通過根來搜索,你應該在CONTAINS中使用FORMSOF謂詞。類似這樣的N'FORMSOF(INFLECTIONAL,「شمس」)' –

+0

@ElyasHadizadeh在你的情況下,通過根搜索可能是不可能的。據我所見,這種根提取沒有在引擎中實現。嘗試以下兩個查詢來檢查: –