SQL Server中的阿拉伯语FullText搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server中的阿拉伯语FullText搜索相关的知识,希望对你有一定的参考价值。

我在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

答案

我会推荐这种方法:

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) 

以上是关于SQL Server中的阿拉伯语FullText搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中首先使用 FULLTEXT 显示相关记录?

MS SQL 包含与 & 符号搜索

如何在 SQL Server中 将日期格式化

如何在 SQL Server中 将日期格式化

TFS 查询错误 - SQL Server 遇到错误 0x80070005

安装sql server的时候,sql server database services显示为灰色不能选中,怎么回事