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 显示相关记录?