none
SQL Server Volltextindex und Umlaute RRS feed

  • Frage

  • Hallo,

    in dem SQL Server ist die Volltextengine aktiviert. Es gibt zwei Datensätze. 

    Datensatz 1: "vorname"

    Datensatz 2: "vörname"

    Suche ich nach "vor" werden beide Datensätze geliefert. Auch bei der Suche nach "vör" werden beide geliefert.

    Kann mir bitte jemand die Ursache hierfür geben? Besteht die Möglichkeit, dieses Verhalten zu beeinflussen, so dass bei der Suche nach "vör" nur der Datensatz "vörname" und "vor" nur "vorname" liefert?

    Danke und viele Grüße,
    Christian

    Mittwoch, 25. September 2019 08:43

Antworten

  • Wo sollte dann bitte der Aufruf von dm_fts_parser erfolgen?

    Hallo Christian,

    gar nicht, das diente nur dafür zu zeigen, wie der FTS die Texte abhängig von Akzent-sensitive indiziert. Die Einstellung selbst musst Du am FTS Katalog vornehmen.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 26. September 2019 05:48
  • Hallo Christian,

    schau mal in Olafs Screenshot. Dort findest Du oben einen Button "Skript". Ändere die Einstellung wie gewünscht und klick dann auf diesen Button, dann wird das SQL Skript erzeugt, dass die Änderung vornimmt.

    Dieses Skript kannst Du dann auch über deine Anwendung (ausreichende Berechtigungen vorausgesetzt) auch auf dem Datenbankserver ausführen.

    Diesen Button gibt es übrigens in den allermeisten Einstellungsdialogen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 26. September 2019 07:33
    Moderator
  • Ist die Option "Unterscheidung nach Akzent / Mit Unterscheidung" mittels SQL konfigurierbar?

    Klar:

    ALTER FULLTEXT CATALOG [FTSKatalog] REBUILD WITH ACCENT_SENSITIVITY = ON;

    Der Neuaufbau des Kataloges läuft asynchron, d.h. das Statement ist sofort fertig, die ersten Suchergebnisse erhält man aber erst mit der Zeit.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 26. September 2019 08:17

Alle Antworten

  • Hallo Christian,

    Du musst den Volltext-Katalog mit der Option Akzent-sensitive anlegen, Beispiel für das Ergebnis dann

    select display_term from sys.dm_fts_parser(N'vorname', 1031, 0, 0)
    select display_term from sys.dm_fts_parser(N'vörname', 1031, 0, 0)
    
    select display_term from sys.dm_fts_parser(N'vorname', 1031, 0, 1)
    select display_term from sys.dm_fts_parser(N'vörname', 1031, 0, 1)

    der letzte Parameter steht für akzent-sensitive und die letzten beiden Abfragen liefern das gewünscht Ergebnis


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 25. September 2019 09:01
  • Hallo Olaf,

    herzlichen Dank für deine schnelle Hilfe!

    Kannst du mich bitte noch unterstützen bei der Nutzung der Funktion dm_fts_parser?

    Wenn ich aktuell in meinem C# Programm Daten wie folgt abrufe.

    using (cmd = new SqlCommand {Connection = dbConn})
    {
    
      cmd.CommandText = "SELECT * FROM MyTable where [HIER NOCH PARAMETER]"
      cmd.Parameters.AddRange(ListOfMySqlParameters);
    
      var reader = cmd.ExecuteReader();
    
      do
      {
        bool hasMore = reader.Read();
        // Hier werden die Daten ausgelesen
      }
    
    }

    Wo sollte dann bitte der Aufruf von dm_fts_parser erfolgen?

    Danke und viele Grüße,
    Christian

    Mittwoch, 25. September 2019 15:18
  • Das schränkt die Suchmöglichkeiten allerdings nicht unerheblich ein, da man bei Volltextsuchen auch gerne nach Ähnlichkeiten suchen möchte insbesonders bei Tippfehlern und Duplikatsuchen, was bei sensitiven Indizes dann nicht mehr oder nur erschwert möglich ist.
    Mittwoch, 25. September 2019 15:19
  • Wo sollte dann bitte der Aufruf von dm_fts_parser erfolgen?

    Hallo Christian,

    gar nicht, das diente nur dafür zu zeigen, wie der FTS die Texte abhängig von Akzent-sensitive indiziert. Die Einstellung selbst musst Du am FTS Katalog vornehmen.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 26. September 2019 05:48
  • Guten Morgen Olaf,

    ich kann mich nur nochmals für deine Hilfe herzlichst bedanken.

    Ist die Option "Unterscheidung nach Akzent / Mit Unterscheidung" mittels SQL konfigurierbar? D.h. bei bereits laufenden Systemen wird ein Update der .NET Anwendung eingespielt, diese prüft mittels SQL Query ob die Option aktiviert ist und falls nicht aktiviert sie diese.

    Viele Grüße
    Christian

    Donnerstag, 26. September 2019 07:27
  • Hallo Christian,

    schau mal in Olafs Screenshot. Dort findest Du oben einen Button "Skript". Ändere die Einstellung wie gewünscht und klick dann auf diesen Button, dann wird das SQL Skript erzeugt, dass die Änderung vornimmt.

    Dieses Skript kannst Du dann auch über deine Anwendung (ausreichende Berechtigungen vorausgesetzt) auch auf dem Datenbankserver ausführen.

    Diesen Button gibt es übrigens in den allermeisten Einstellungsdialogen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 26. September 2019 07:33
    Moderator
  • Hallo Stefan,

    auch bei dir bedanke ich mich herzlichst!

    Damit sollte es klar sein.

    Viele Grüße,
    Christian

    Donnerstag, 26. September 2019 07:57
  • Ist die Option "Unterscheidung nach Akzent / Mit Unterscheidung" mittels SQL konfigurierbar?

    Klar:

    ALTER FULLTEXT CATALOG [FTSKatalog] REBUILD WITH ACCENT_SENSITIVITY = ON;

    Der Neuaufbau des Kataloges läuft asynchron, d.h. das Statement ist sofort fertig, die ersten Suchergebnisse erhält man aber erst mit der Zeit.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 26. September 2019 08:17