0

Ich habe ein Problem in Arabisch Volltextsuche in SQL-Server, diese link sagt, dass wir Arabisch in Volltextsuche verwenden können.Arabische Volltext Suche in SQL Server

Um mehr zu beschreiben, habe ich die Volltextsuche in einer meiner Spalten aktiviert, die arabische und englische Texte enthält.

Wenn ich Volltextsuche für englische Eingaben verwende, funktioniert alles gut, aber in Arabisch tut es nichts.

Bitte beachten Sie, dass ich auch meine Abfragen mit anderen Tabellen, die nur arabische Inhalte haben, testen und wieder habe ich nichts.

Gebrauchte Abfragen sind wie folgt aus:

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

Wie erstellen Sie Volltextkatalog und Index? – Backs

+0

@Backs mit der rechten Maustaste auf die Tabelle, Volltextindex, dann definieren Volltextindex, ich habe einen Katalog erstellt und am Ende wähle ich eine Spalte der Tabelle und klickte auf die nächste Schaltfläche. (So ​​habe ich das Wizard-Menü für die Erstellung verwendet) –

+0

Wenn Sie viele Zeilen in der Tabelle haben, kann es eine Weile dauern, bis sie indexiert werden ... Können Sie das ganze sql-Skript hinzufügen? – Backs

Antwort

0

Ich würde diesen Ansatz empfehlen:

1) Stellen Sie sicher, dass Ihre Spalte in der Datenbank nvarchar ist 2) Stellen Sie sicher, Sie fügen Nvarchar-Wert in die Spalte ein.

Hier ist eine kleine Demo, warum dies wichtig ist. Wahrscheinlich haben Sie eines der in diesem Skript gezeigten Probleme.

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, '"الاستنتاجات ونصائح للوقاية من أشعة الشمس*"') 

Das gleiche Problem mit Ihrer zweiten Abfrage. '' - bedeutet ein Varchar-Literal, N '' - bedeutet Nvarchar. Versuchen Sie diese Abfrage zu überprüfen:

SELECT * FROM sys.dm_fts_parser(N'"الاستنتاجات ونصائح للوقاية من أشعة الشمس"', 1025, 0, 0) 
+0

danke für Ihre Antwort meine zweite Abfrage nach der Manipulation gibt Wert zurück, aber meine erste Abfrage funktioniert immer noch nicht, eigentlich muss ich FullTextSearch mit Arabisch und nur mit der Übergabe verwenden Iمس Ich möchte الاستنتاجات ونصائئ للوقاية من أشعة الشمس bekommen, bitte beachten Sie, dass شمس die Wurzel von الشمس ist. wie gehen, was die Wurzel des Gehens oder Weggehens ist. –

+0

@ElyasHadizadeh going kann durch go * Prädikat gefunden werden, aber dies bedeutet nicht die Suche nach der Wurzel, dies ist nur eine Wildcard-Suche. Wenn Sie nach dem Stamm suchen möchten, sollten Sie das FORMSOF-Prädikat in CONTAINS verwenden. Etwas wie dieses N'FORMSOF (INFEKTIONAL, "شمس") ' –

+0

@ElyasHadizadeh in Ihrem Fall die Suche durch die Wurzel möglicherweise unmöglich. Soweit ich sehe, ist ein solcher Root-Extrakt in der Engine nicht implementiert. Versuchen Sie die folgenden zwei Abfragen zu überprüfen: –