I have a problem in Arabic Full Text Search in SQL-Server, this link says that we can use Arabic in full text search.
To describe more, I've enabled full text search on one of my columns which contains Arabic and English texts.
When i use full text search for English inputs every thing works fine but in Arabic it doesn't.
please notice that i also test my queries with other tables that just have Arabic contents and again i got nothing.
Used queries are like this:
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
I would recommend this approach:
1) Make sure your column in the database is nvarchar 2) Make sure you are inserting nvarchar value into the column.
Here is a small demo of why this is important. Probably you have one of the issues shown in this script.
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, '"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"')
The same issue with your second query. '' - means a varchar literal, N'' - means nvarchar. Try this query to check:
SELECT * FROM sys.dm_fts_parser(N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', 1025, 0, 0)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With