WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   php-volltextsuche (http://www.wcm.at/forum/showthread.php?t=164308)

heli2sky 23.04.2005 16:20

php-volltextsuche
 
hallo!

bis jetzt habe ich auf meiner seite folgende suche gehabt:

PHP-Code:

    $query1 "SELECT * FROM begriffe WHERE MATCH(begriff) AGAINST('$suche*' IN BOOLEAN MODE);";
    
$query2 "SELECT * FROM begriffe WHERE MATCH(text) AGAINST('$suche*' IN BOOLEAN MODE);";
    
$query3 "SELECT * FROM comments WHERE MATCH(comment) AGAINST('$suche*' IN BOOLEAN MODE);"

diese lösung ist, naja, sagen wir mal unfein, nur hab ich die aus zeitgründen bis jetzt nicht verbessern können und sie funktioniert ja auch einigermaßen:
zuerst werden alle ergebnisse von query1 ausgegeben (übereinstimmungen in der begriffs-überschrift), dann welche aus der beschreibung (query2) und dann welche aus den dazu geposteten kommentaren (query3).


probleme dabei:

. es werden nur wörter mit mindestens 4 buchstaben gesucht. das ist sehr schlecht, da sehr viele abkürzungen vorkomen, die zum teil sogar nur aus 2 buchstaben bestehen und dann nicht gefunden werden :(
. mit "akku" findet man "akkumulator" aber nicht "bleiakku" (wegen '$suche*' ist das so... und '*$suche' funktioniert nicht (wieso?)
(. ergebnisse sind durcheinander (bis auf die oben genannte reihung))

wie stelle ich es am besten an, eine gute suchfunktion hin zu bekommen? die oben angeführte reihung will ich eigentlich nicht ändern (zuerst übereinstimmungen in der überschrift, dann im text, dann in den comments), aber $wort* als übereinstimmung ist mir zu ungenau. es sollte eher in richtung *$wort* laufen, verständlich?

danke schon im voraus.

T.dot 23.04.2005 19:54

Ich kenn mich bei der mysql-volltextsuche auch ned wirklich aus, aber bei Stringüberprüfungen macht man normalerweise

where irgendwas like '%suchtext%'

Könnt mir also gut Vorstellen, dass es mit AGAINST('%$suche%') geht.

Steht dazu nix im Manual?

mfg Thomas

flocky 23.04.2005 20:19

wie bistn auf den umständlichen schaß da oben gekommen?

ich use einfach:
SELECT * FROM table WHERE name LIKE '%$searchstring%'
somit kriegst auch ergebnisse die den gesuchten string zur zum teil enthalten, wennsts genau haben willst brauchst:

SELECT * FROM table WHERE name='$searchstring'

Alex1 24.04.2005 11:12

Zitat:

Original geschrieben von flocky
wie bistn auf den umständlichen schaß da oben gekommen?

Indem er die mysql Volltextsuche benutzt, und du nicht.

flocky 24.04.2005 16:05

ich verstehe nicht inwiefern sich meine lösung von einer volltextsuche unterscheidet, ich find ja genau so alles :rolleyes:

snowman 24.04.2005 16:49

zB Gewichtung nach Relevanz.

gruss,
snowman

flocky 24.04.2005 16:59

darauf lässt sich ja aufgrund der returnten ergebnisse ja immer noch schließen

snowman 24.04.2005 20:13

wäre aber zusätzlicher aufwand; fulltext indexing ist auch dabei und entlastet natürlich die datenbank.

gruss,
snowman


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag