PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Suchen" bei den Bildern


Floxy
19.11.2009, 08:11
Guten Morgen,
kann es sein, dass die Suche Funktion im Imageboard mal so gar nicht funktioniert, wenn man nach zwei Begriffen sucht :confused: ?

Psyman2
19.11.2009, 08:50
Bei zwei Begriffen ist es etwas komplizierter ^^ aber mit ein wenig herumgefummle findet man trotzdem was man braucht.

Ist für mich pers. aber ehrlich gesagt Übungssache gewesen, wie es funktioniert weiß ich nicht.

Also ja, es funktioniert nicht so, wie man es erwartet.

Judikator
19.11.2009, 20:06
Bei zwei Begriffen ist es etwas komplizierter

Also ja, es funktioniert nicht so, wie man es erwartet.

würde ich so jetzt nicht unterschreiben^^, du hast zwar unter Garantie mehr Erfahrung mit der SuFu als ich, aber bis jetzt hat das bei mir immer ganz gut geklappt

man muss halt beachten das die Namen der Bilder mit einbezogen werden (nicht nur die Tags) soweit ich mich erinner, und wenn man was bestimmtes sucht kann man ja evtl noch eingrenzen nach der ersten Suche

Bsp.
Suche "combo" liefert 12 Ergebnisse
Suche "combo breaker" liefert 7 Ergebnisse
Suche "combo breaker motivational" liefert noch 4 Ergebnisse
Suche "combo breaker -motivational" liefert die anderen 3 Ergebnisse

Probleme treten natürlich auf wenn man nach Begriffen wie "4chan" sucht XD
==> 18 Seiten Suchergebnisse

Wenn man dann allerdings nach "4chan -tits" sucht sind plötzlich nur noch 3 Seiten (das meinte ich mit eingrenzen) ;)

TheSeek3R
19.11.2009, 21:32
aber man muss mit Gänsefüßchen suchen, oder?!

Judikator
19.11.2009, 22:39
nein, zumindest bei meinem post sollten die nur zeigen was im suchfeld steht...
is vllt misverständlich...

Psyman2
21.11.2009, 14:18
Such mal nach "Geld" und danach nach "Geld Windows"
Also im Suchfeld ohne Anführungszeichen.
Wenn du nach beiden Begriffen suchst erhältst du mehr Ergebnisse als bei der Suche nach einem Begriff.

Also ganz geblickt habe ich die Suche ohne Sonderzeichen noch nicht.

mit Sonderzeichen gibt es aber auch Schwierigkeiten, bestes Beispiel ist hier wohl die Suche nach cartridge und cartr*
eigentlich sollte cartr* alle Bilder zeigen, die cartr enthalten, aber eines der cartridge Bilder wird _nicht_ angezeigt.

Der Grund? cartridge steht leider im Dateinamen und zwar am Ende, also müsste man auf beiden Seiten mit Sternen suchen.

Also schafft die SuFu es, ohne Stern im gesamten Dateinamen nach der Buchstabenfolge zu suchen, in den Tags aber nur nach dem speziellen Wort
Beispiel hatten wir kürzlich: Suche nach "Schuh" ergab nicht das gewünschte, aber mit "Schuhe" lag man richtig, weil Schuhe getaggt wurde.
Wäre Schuhe der Dateiname gewesen hätte auch die Suche nach Schuh das Bild angezeigt.

Also etwas verworren ^^

dekadenZ
07.12.2009, 01:44
mhh, also ich weiß ja nicht, auf was die suchfunktion softwaretechnisch aufsetzt, aber wenn du mir nen tipp gibst, werfe ich mal nen blick auf deren doku bzw. code.

im besten fall kann man die suchfunktion so hinbiegen, dass sie wie erwartet funktioniert. ansonsten sollte zumindest rauszukriegen sein, wie sie im moment funktioniert. :-]

cha0s
11.12.2009, 08:15
Joar, die Suche is ziemlich suboptimal, muss ich leider zugeben. Das ganze setzt auf den MySQL FULLTEXT Index auf - was selbst auch nich so das gelbe vom Ei is.


WHERE
i.name LIKE :1
OR
MATCH( i.tags ) AGAINST ( :2 IN BOOLEAN MODE ):1 = '%'.$term.'%'
:2 = preg_replace( '/\s+/', ' +', $term );

Macht also aus "deine mutter" dann "%deine mutter%" um im Bildnamen mit LIKE zu suchen und "deine +mutter" für die Fulltext Suche. Das '+' vor "mutter" is wichtig, weil [no operator] implies OR; (http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html). D.h. ohne das '+' würde die Suche auch Bilder finden, die nur eines der beiden Wörter enthält, was imho ziemlich blöd wäre. Der Bildname wird mit LIKE durchsucht, weil hier ein FULLTEXT Index völlig versagen würde (kann die Wörter nicht trennen etc.).

Vorschläge? Bildnamen komplett ignorieren und nur Tags berücksichtigen?

Am gescheitstn wär natürlich den Tag Index selbst zu bauen und sich nicht auf FULLTEXT zu verlassen, aber... joar, dazu fehlt mir die Muse :P

Psyman2
11.12.2009, 08:51
Seid nur bitte so nett und ändert nichts ohne Vorwarnung :O

dekadenZ
12.12.2009, 01:05
wie wäre es, stattdessen folgendes zu tun:
WHERE MATCH( CONCAT_WS( ' ', i.tags, i.name ) ) AGAINST ( :2 IN BOOLEAN MODE )dann durchsuchst er namen und tags mit der volltextsuche. das ist zwar derbe langsam, aber so lange ihr nicht zu viele einträge (bilder) und genug systemressourcen habt, sollte das gehen.

an sich müsste man die datenbank von vorneherein so aufbauen, dass sie jedes einzelne wort in den tags in ne tabelle haut zusammen mit dem bild, zu dem sie gehören, und dann nen volltextindex drüber anlegen (damit man auch teilwörter findet). den dateinamen behandelt man genauso. als trennmuster, das tags und namen in "wörter" aufspaltet, schlage ich irgendwas in der art vor: /[^[:alnum:]-]+/dann sind mit der richtigen LOCALE auch alle umlaute usw. drin.

EDIT: "Lucene" ist ne tolle Open-Source-Volltextsuchmaschine, die mein letzter Arbeitgeber in seinen Produkten einsetzt. Aber das wäre vermutlich mit Kanonen auf Spatzen geschossen. ;-]

Psyman2
12.12.2009, 01:30
lieber mit Kanonen als mit Staubflocken

justmy2cents

cha0s
12.12.2009, 09:40
Mhh blah, den Bildnamen per Fulltext zu durchsuchen bringt ja nix. Wenn das Bild "deinemutter548.jpg" heisst, würde es weder mit "deine" noch mit "mutter" gefunden werden.

Um jetzt noch an der DB-Struktur rumzufuddeln habe ich auch keinen bock mehr. Wobei das aufteilen der Tags sicher der "richtige" Weg wäre. Aber naja, das is wie nen Traktor zu tunen 0_o

Ich arbeite ja schon seit ner Weile am neuen pr0gramm (http://www.pr0gramm.com/). Da wird alles anders und besser. Vllt. kommt das dann ja auch mal irgendwann noch zu Lowbird. Dauert bestimmt nurnoch nen paar Jahre :D

Apache Lucene is a high-performance, full-featured text search engine library written entirely in JavaAb da hab ich aufgehört zu lesen :P

dekadenZ
12.12.2009, 14:12
Ab da hab ich aufgehört zu lesen :P
Ich weiß immer nich, was die Leute gegen virtuelle Maschinen haben.^^ Sicher sind die um nen Faktor 1,5-2 langsamer als in Maschinencode kompilierte Programme, aber das kann man mit mehr Hardware ausgleichen. Was man kaum durch mehr Ressourcen (Hardware, Arbeitskraft, Geld) ausgleichen kann, ist schlimmer, gruseliger Code, und der wird durch VMs entschieden in seiner Fatalität entschärft. Ich sage nur buffer overflow/underrun und ungültige Adresszeiger...