我在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
答案 0 :(得分: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, '"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"')
第二个查询的问题相同。 &#39;&#39; - 表示varchar文字,N&#39;&#39; - 表示nvarchar。请尝试此查询以检查:
SELECT * FROM sys.dm_fts_parser(N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', 1025, 0, 0)