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在你的情况下,通过根搜索可能是不可能的。据我所见,这种根提取没有在引擎中实现。尝试以下两个查询来检查: –