AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Server Volltextsuche: Platzhalter für beliebige Zeichenfolge im Suchbegriff??
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Server Volltextsuche: Platzhalter für beliebige Zeichenfolge im Suchbegriff??

Ein Thema von romber · begonnen am 15. Jul 2016 · letzter Beitrag vom 18. Jul 2016
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

SQL Server Volltextsuche: Platzhalter für beliebige Zeichenfolge im Suchbegriff??

  Alt 15. Jul 2016, 12:21
Datenbank: SQL Server • Version: 2012 • Zugriff über: ADO
Hallo!

Ich habe für eine Tabelle auf dem SQL Server einen Volltextindext eingerichtet und führe Suchanfragen mittels CONTAINS aus. Nun bin ich auf der Suche nach einer Möglichkeit den Suchbeggriff so zu definieren, dass Wortkombinationen mit unbekannten Zeichen im Wort gefunden werden. Z.B. brauche ich einen Suchbegriff, der sowohl "MQR2E1" als auch "MQR-2E1" oder "MQR 2E1" findet.

Ist das überhaupt möglich oder komme ich um die RegEx nicht herum in dem Fall? Bis jetzt habe ich die regulären Ausdrücke benutzt und war sehr unzufrieden damit. Die Anfragen dauerten ewig bei einer DB mit etwa 5M Einträge.

Danke!
  Mit Zitat antworten Zitat
Papaschlumpf73
Online

Registriert seit: 3. Mär 2014
Ort: Berlin
436 Beiträge
 
Delphi 12 Athens
 
#2

AW: SQL Server Volltextsuche: Platzhalter für beliebige Zeichenfolge im Suchbegriff??

  Alt 15. Jul 2016, 15:48
SQL-Server Volltextindizes funktionieren m.E. nur mit Präfixausdrücken: z.B. "MQR*" aber nicht mit "MQR*2EI" oder "*2EI". Das macht auch Sinn. So wird nur jedes Wort indiziert und nicht jeder Buchstabe jedes Wortes.

Sofern deine Suche immer nach diesem Schema läuft, kannst du folgende Variante einsetzen:

1. Erstelle eine Funktion auf dem SQL-Server, welche alle Sonderzeichen, Leerzeichen usw. aus einem String entfernt und den "sauberen" String zurückgibt.

2. Erstelle ein zusätzliches Feld in der Tabelle, in den der "saubere" String (per Trigger) automatisch eingefügt/aktualisert wird. Der Trigger benutzt dazu die o.g. Funktion. Dieses neue Feld bekommt dann auch den Volltextindex.

3. Die CONTAINS-Abfrage benutzt auch die o.g. Funktion, um die Suchbegriffe zu bereinigen. Beispiel: CONTAINS(Table1, dbo.GetSauberenSuchbegriff(@Suchbegriff))
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQL Server Volltextsuche: Platzhalter für beliebige Zeichenfolge im Suchbegriff??

  Alt 18. Jul 2016, 12:09
Es kommt drauf an.
In verschiedenen DBMS kann man bei der Volltextsuche eingreifen, als was wie indiziert wird, oder man implementiert einfach alles selber.
  • In deinem Fall kannst du vor/bei der Indizierung Sonderzeichen ignorieren/entfernen.
  • Außerdem kann man z.B. ein Wort mehrfach indizieren, was das Problem mit dem *xxx behebt,
    z.B. das Wort "ABC" wird als "ABC", 'BC' und 'C' indiziert, (natürlich unter Berücksichtigung der minimalen Wortlänge),
    womit man dann auch indiziert nach der Wortmitte suchen könnte.
    Man kann da noch mehr machen, um z.B. den Index zu verkleinern, wie z.B. nur an silben trennen und nicht buchstabenweise,
    oder entsprechend den Wortstamm indizieren und dann halt auch die Suchausdrücke anpassen, vor der Suche usw.
  • man kann die Generierung des Suchindex beeinflussen oder halt vorher die Suchgrundlage bereinigen (siehe der genannte Tipp mit der zweiten Suchspalte)

https://msdn.microsoft.com/de-de/library/ms142571.aspx
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (18. Jul 2016 um 12:32 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz