Laden...

Volltextsuche MS SQL

Erstellt von Hanswurst90 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.010 Views
H
Hanswurst90 Themenstarter:in
62 Beiträge seit 2007
vor 13 Jahren
Volltextsuche MS SQL

verwendetes Datenbanksystem: <Microsoft SQL 2008 R2>

Hi,

ich habe eine recht umfangreiche Suche die möglichst Kundenfreunlich und simpel zu bedienen sein soll.
Meine Erste Idee war ganz klar: die Volltextsuche

Das ganze habe ich dann auch eine Weile ausprobiert und mich etwas damit beschäftig.
Meine Tabelle auf die das ganze angewendet werden soll siieht wie folgt aus:

int varchar decimal varchar
ID Name Preis Pnr

1 Excel 5,00 124235453
2 Word 4,00 z

In meinen Versuchen suche ich nach ce & 4235 und möchte als Ausgabe den Datensatz mit der ID 1 haben (nur wenn beides zutrifft)

Mein erster Versuch war:


SELECT * FROM tbl_broschueren_broschuere WHERE Contains(*, '"*ce*" AND "*4235*"')

Die Ausgabe war nichts!

Mein 2. Versuch war:


SELECT * FROM tbl_broschueren_broschuere WHERE Freetext(*, '"ce 4235"')

wiederum kommt als Rückgabe nichts.

Mein 3. Versuch war:


SELECT * FROM tbl_broschueren_broschuere WHERE Contains(*, '*4235*') AND Contains(*, '*ce*');

wiederum kommt als Rückgabe nichts.

Hat jemand eine Idee, wie ich meinem Problem Herr werden kann?

Vielen Dank für alle Antworten schon einmal im Voraus!

Gelöschter Account
vor 13 Jahren
SELECT 
Name, Preis, Pnr 
FROM X WHERE 
(
 Name LIKE 'ce' 
 OR Preis LIKE 'ce' 
 OR Pnr LIKE 'ce'
) 
AND 
(
 Name LIKE '4235' 
 OR Preis LIKE '4235' 
 OR Pnr LIKE '4235'
)

Das setzt voraus das die Infos als Strings in der Datenbank hinterlegt sind (varchar) und du musst den Eingabestring Parsen und in einer schleife dann dynamisch das "WHERE" zusammenbauen aber ansonsten funktioniert es nach diesem Prinzip.

L
416 Beiträge seit 2008
vor 13 Jahren

Ist in MS SQL nicht % das Wildcard Zeichen?

H
Hanswurst90 Themenstarter:in
62 Beiträge seit 2007
vor 13 Jahren

Hallo,

die Antwort würde in diesem einem Fall funktionieren, aber was ist wenn der User 10 Wörter oder Zeichenketten eingibt (natürlich nicht wenn er dise kleine Tabelle durchsuchen will, aber ich habe vor die Suche ebenfalls auf komplexere Tabellen anzuwenden.

@Lennart -> normaler Weise schon, aber bei der Volltextsuch (laut Anleitungen) nicht, hier wird das *chen verwendet.

Gelöschter Account
vor 13 Jahren

die Antwort würde in diesem einem Fall funktionieren, aber was ist wenn der User 10 Wörter oder Zeichenketten eingibt

-->

du musst den Eingabestring Parsen und in einer schleife dann dynamisch das "WHERE" zusammenbauen

H
208 Beiträge seit 2008
vor 13 Jahren

Wenn die Anzahl der Tabellen überschaubar ist, könntest Du für jede Tabelle eine View anlegen, in der Du alle Spalten zu einer zusammenfaßt:

create view BroschuerenSuche as
select
  ID, 
  isnull(Name, '') + cast(Preis as varchar(50)) + isnull(Pnr, '') as Suchfeld
from
  tbl_broschueren_broschuere

Und dann einfach auf die View selektieren:

select ID from BroschuerenSuche where Suchfeld like '%ce%' and Suchfeld like '%4235%'

Die Where-Bedingung mußt Du zwar immer noch selbst zusammenbauen, aber sie ist weniger aufwendig als die im Beispiel von Jack30lena, egal wieviele Spalten die Tabelle hat.

Allerdings hat meine Methode den Nachteil daß sie auch "spaltenübergreifende" Ergebnisse findet.
Z.B. den Suchbegriff "cel5" ("cel" von "Excel" und die 5 aus der Spalte danach).

Gelöschter Account
vor 13 Jahren

Allerdings hat meine Methode den Nachteil daß sie auch "spaltenübergreifende" Ergebnisse findet.

Nicht nur das.. die performance ist auch mießer.

So oder so musst du den Where anteil dynamisch zusammenbauen und mit meiner Methode sind das nicht mal 10 Zeilen Code. Ich verstehe nicht, warum du dich davor drückst...

H
Hanswurst90 Themenstarter:in
62 Beiträge seit 2007
vor 13 Jahren

Vielen Dank für eure beiden Antworten, aber eine Idee zur Nutzung der Volltextsuche hat keiner von euch, da diese (laut Microsoft), gegenüber eines gewöhnlichem Suchstrings , um einiges performanter ist?

X
1.177 Beiträge seit 2006
vor 13 Jahren

huhu,

Volltextsuche vs. Like - da hatten wir mal eine lange Diskussion. Das ist (auch lt. Microsoft) nicht performanter. Denn das lässt sich nciht per se sagen. Wenn Du eine Spalte mit großen Texten hast (z.b. die 100.000 Worddokumente der Firma), dann kann es performanter sein - muss aber nicht. Für ein Suchsetting ala "in welcher Spalte steht das" trifft es wohl am wenigsten. Volltextsuche wird dann performant, wenn die zu durchsuchenden Daten gross sind (nicht in Anzahl von Zeilen, sondern in Menge pro Zelle)

Desweiteren hat die Volltextsuche ein paar Mankos bezüglich der Syntax - mangels Erfahrung weis ich die nicht mehr - aber LIKE hat sich als im allgemeinen besser herausgestellt.

😃

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.