SQL Server中的阿拉伯语FullText搜索

问题描述 投票:2回答:1

我在SQL-Server的阿拉伯语全文搜索中遇到问题,这个link说我们可以在全文搜索中使用阿拉伯语。

为了描述更多内容,我在我的一个包含阿拉伯语和英语文本的列上启用了全文搜索。

当我使用全文搜索英语输入时,每件事情都可以正常工作,但在阿拉伯语中却没有。

请注意我也用其他只有阿拉伯语内容的表来测试我的查询,但我什么也没得到。

使用过的查询是这样的:

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

sql-server sql-server-2012 full-text-search sql-server-2014
1个回答
1
投票

我会推荐这种方法:

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) 
© www.soinside.com 2019 - 2024. All rights reserved.