Antworten auf deine Fragen:
Neues Thema erstellen

MySQL Volltextsuche mit Bindestrichen

emtrion

Nicht mehr ganz neu hier

Hallo,

ich nutze eine MySQL Datenbank mit Volltextsuche. In dieser Datenbank sind teilweise Artikelnummern in dem Format "01-234" oder "abc-def-12-gh".

Bei der Volltextsuche wird aber der Bindestrich als Operator verwendet. Bei "01-234" wird dann nach "01" und "234" gesucht. Dafür bekomme ich aber keine Ergebnisse, da ein Suchbegriff mindestens 4 Zeichen lang sein muss.

Gibt es eine Möglichkeit die Operatoren zu deaktivieren? Sonst bin ich wohl gezwungen auf ein ganz anderes Suchverfahren zu wechseln, was ich eigentlich nicht machen möchte...

Grüße,
Stephan
 

Duddle

Posting-Frequenz: 14µHz

AW: MySQL Volltextsuche mit Bindestrichen

Das wird wohl ein Feature deines Frontends sein. Die Bezeichnung "MySQL Datenbank mit Volltextsuche" ist auch zu mehrdeutig um zu erkennen, was du genau benutzt.


Duddle
 

emtrion

Nicht mehr ganz neu hier

AW: MySQL Volltextsuche mit Bindestrichen

Ich nutze eine MySQL Datenbank mit einer Tabelle im MyISAM Mode. In dieser Tabelle habe ich einen FULLTEXT-Index erstellt:
PHP:
ALTER TABLE data_parts ADD FULLTEXT(Spalte1, Spalte2);
Nun kann ich mit dem MYSQL Query
PHP:
SELECT * FROM dbnews WHERE MATCH(titel, inhalt) AGAINST('Datenbanken');
suchen. Allerdings halt nicht nach den oben genannten Wörtern.

Mein Frontend ist selbst gebaut und verändert nicht den Suchstring. Die Interpretation der Operatoren macht der Datenbank-Server selbst.
 

Duddle

Posting-Frequenz: 14µHz

AW: MySQL Volltextsuche mit Bindestrichen

Okay, ich hatte dich falsch verstanden. In deinem Fall arbeitet "-" nicht als Operator, sondern als Trennzeichen wie ein Leerzeichen o.ä.

Du könntest jetzt wohl drei Ansätze fahren: entweder änderst du die minimale Suchwort-Länge, was aber Admin-Zugriff benötigt. Oder du fügst das "-" als echtes Zeichen zu MySQL hinzu, wie in dem allerersten Kommentar ("How I added ...") dieser Handbuchseite beschrieben, was auch gewisse Rechte erfordert. Die dritte Variante wäre, die Suche im boolschen Modus zu betreiben und nach Phrasen zu suchen, also
PHP:
MATCH(...) AGAINST('"01-234"' IN BOOLEAN MODE)


Duddle
 

emtrion

Nicht mehr ganz neu hier

AW: MySQL Volltextsuche mit Bindestrichen

Den Boolean Mode hatte ich schon versucht und das bringt keine Änderung. Es wird weiterhin in mehrere Suchwörter aufgeteilt. Ich habe gelesen, dass man damit unterbinden kann, dass die Suche abgebrochen wird, wenn das Suchwort in mehr als 50% aller einträge vorkommt. Das man damit die Opertatoren desktivieren kann hab ich noch nicht gelesen.

Die Suchwortlänge möchte ich ändern lassen. Aber dazu muss mein Admin ersteinmal prüfen was dies für die anderen Datenbanken auf dem Server bedeutet... Aber das führ dann noch immer dazu, dass Suchstrings wie "abcde-defgh-1234-ghij" noch immer in vier Worte aufgeteilt werden und ich dann nicht nur den einen Eintrag mit dieser Artikelnummer bekomme, sondern alle einträge, deren Artikelnummer z.B. mit "abcde" anfangen oder "1234" enthalten.

Würde nur noch die Option bleiben "-" als echtes Zeichen einzutragen. Hier sehe ich noch viel mehr Probleme, da dann andere Systeme auf dem Server (interner Server für verschiedenste browserbasierte Anwendungen) nicht mehr laufen...
 

Duddle

Posting-Frequenz: 14µHz

AW: MySQL Volltextsuche mit Bindestrichen

Wenn du aber die Suche im boolschen Modus in " " packst, wird das als Phrase gesucht, also 1-zu-1. Das sollte laut Doku der richtige Ansatz sein, in einem lokalen Beispiel funktioniert es auch.


Duddle
 

emtrion

Nicht mehr ganz neu hier

AW: MySQL Volltextsuche mit Bindestrichen

ok, ich hatte glaube ich noch ein Problem mit den Anführungszeichen. Jetzt wird wirklich nach dem String in den Anführungszeichen gesucht. Aber wenn ich z. B. nach "e-tec" (das kommt genau so in mehreren Zellen meiner Tabelle vor) suche. Dann findet er nichts.
Das ist mein query:
PHP:
SELECT * FROM data_parts WHERE MATCH(Spalte1, Spalte2) AGAINST('"e-tec"' IN BOOLEAN MODE)
Jetzt müsste er den String doch als 4 Zeichen ansehen, oder? Wenn es noch immer die Beschränkung mit der minimalen Wortlänge gibt, dann trennt er also noch immer den String in zwei Worte. Und dann müsste ich die minimale Wortlänge wegen dem "e-" komplett ausschalten, also auf 1 setzen.

Ist es auch möglich jetzt noch Wildcards (%) zu verwenden? Wenn ich z.B. von einem String das este Zeichen weglasse, dann findet er auch nichts mehr. Also wenn ich "abcde" in der Tabelle stehen habe, und nach "bcde" suche, dann bekomme ich keine Ergebnisse. Ich habe schon
PHP:
 '"%bcde%"'
und
PHP:
'%"bcde"%'
versucht....
 

Duddle

Posting-Frequenz: 14µHz

AW: MySQL Volltextsuche mit Bindestrichen

Nein, der Ausdruck im boolschen Modus folgt eigenen Regeln, siehe http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html
Die Wildcard erwischt nur Wortenden:
The asterisk serves as the truncation (or wildcard) operator. Unlike the other operators, it should be appended to the word to be affected. Words match if they begin with the word preceding the * operator.
Aber offenbar habe ich mich auch verlesen. Zwar werden die Wörter in " " als Phrase gesucht, aber das gilt nur für die Reihenfolge und wie du es schon sagst trennt er die intern immer noch auf.
'"some words"'

Find rows that contain the exact phrase “some words” (for example, rows that contain “some words of wisdom” but not “some noise words”).

Ab diesem Punkt bin ich auch überfragt. Ich glaube, du müsstest entweder die Suchwortlänge verkleinern oder eben die Volltextsuche fallen lassen. Dein Anwendungsfall passt offenbar nicht gut in dieses Feature.


Duddle
 

emtrion

Nicht mehr ganz neu hier

AW: MySQL Volltextsuche mit Bindestrichen

Ich denke ich werde mal versuchen mein Admin zu überreden die Mindestwortlänge auf 1 zu setzen. Und dann mal sehen ob die Anwender damit klar kommen. Ich werde die Anführungszeichen auch aus dem Query weglassen.
Die Anwender sind alles IT Leute die können diese dann selbst um Suchfeld einsetzen wenn sie wollen. Eine Kombination aus Anführungszeichen und Asterix geht nämlich leider nicht. Da kann ich mich dann nicht iim Query festlegen.

Ich hoffe, dass die Suche damit dann funktioniert, da dies eine echt einfache Lösung wäre. Sonst muss ich mir was eigenes bauen...

Danke auf jeden Fall für deine Hilfe!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.619
Beiträge
1.538.363
Mitglieder
67.540
Neuestes Mitglied
Alex Weidner
Oben