Suchfunktion unter MS SQL

Please report bugs here!

Moderator: Thorsten

Post Reply
webchills
Posts: 26
Joined: Fri Jan 31, 2003 12:30 pm
Location: Wien
Contact:

Suchfunktion unter MS SQL

Post by webchills »

Habe 1.5.0 RC5 mit MS SQL laufen. Bei der Suche sind mir 2 Sachen aufgefallen:
1) Wenn ich nach 2 Begriffen durch Abstand getrennt suche, wird nicht nach der Relevanz absteigend gesucht. Erstes Suchergebnis ist meist ein Eintrag, in dem zwar eins der beiden Wörter vorkommt. Ein Eintrag, in dem wirklich beide vorkommen wird aber ganz weit hinten angezeigt
2) Wenn ich nach 2 Begriffen durch Abstand getrennt suche, sind in den ersten Suchergebnissen immer zusätzlich die Kategorien angezeigt. Das würde nicht weiter stören, aber es werden irgendwelche angezeigt, in denen die Frage gar nicht enthalten ist.
Beispiellink leider nicht möglich weils im Intranet läuft.
Grüße
Jörg
Thorsten
Posts: 15739
Joined: Tue Sep 25, 2001 11:14 am
Location: #phpmyfaq
Contact:

Re: Suchfunktion unter MS SQL

Post by Thorsten »

Hi,
1) Wenn ich nach 2 Begriffen durch Abstand getrennt suche, wird nicht nach der Relevanz absteigend gesucht. Erstes Suchergebnis ist meist ein Eintrag, in dem zwar eins der beiden Wörter vorkommt. Ein Eintrag, in dem wirklich beide vorkommen wird aber ganz weit hinten angezeigt
MS SQL unterstützt nicht so wie MySQL oder PostgreSQL eine Volltextsuche, das ist der Grund. Eine Möglichkeit wäre, eine Logik nachzubauen, aber dafür habe ich (derzeit) zu wenig Wissen über die MS SQL Datenbank.
2) Wenn ich nach 2 Begriffen durch Abstand getrennt suche, sind in den ersten Suchergebnissen immer zusätzlich die Kategorien angezeigt. Das würde nicht weiter stören, aber es werden irgendwelche angezeigt, in denen die Frage gar nicht enthalten ist.
Das ist im RC6 behoben.

bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
webchills
Posts: 26
Joined: Fri Jan 31, 2003 12:30 pm
Location: Wien
Contact:

Post by webchills »

ad 2)
Kannst Du posten welche Dateien dafür im RC6 geändert wurden? Ich hab schon ein paar mit RC6 CVS ersetzt (mssql.php, search.php), ändert aber nichts.
webchills
Posts: 26
Joined: Fri Jan 31, 2003 12:30 pm
Location: Wien
Contact:

Post by webchills »

Hab jetzt die Suchfunktion in functions.php aus RC6 CVS genommen, mit der werden jetzt die richtigen Kategorien in den Suchergebnissen angezeigt.
Macht es eigentlich unter MS SQL überhaupt Sinn Keywords zu definieren?
Thorsten
Posts: 15739
Joined: Tue Sep 25, 2001 11:14 am
Location: #phpmyfaq
Contact:

Post by Thorsten »

Hi,

es macht schon Sinn, denn auch die Keywords werden bei MSSQL abgefragt.

bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
webchills
Posts: 26
Joined: Fri Jan 31, 2003 12:30 pm
Location: Wien
Contact:

Post by webchills »

Da die Volltextsuche nach der Relevanz absteigend nicht funkt, fänd ichs besser, nur nach Keywords zu suchen. Wenn ich die gut definiere sollten die Ergenisse besser sein. Hast Du eine Suchfunktion für die functions.php, die nur die Keywords durchsucht? Würd das gern mal testen, ob das damit zu besseren Ergebnissen führt.
Thorsten
Posts: 15739
Joined: Tue Sep 25, 2001 11:14 am
Location: #phpmyfaq
Contact:

Post by Thorsten »

Hi,

ja, suche mal nach der Funktion searchEngine(). Dort wird dann aber eine Methode in der Datenbankklasse aufgerufen, bei dem Aufruf kann man dann auch die zu durchsuchenden Felder anpassen.

bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
webchills
Posts: 26
Joined: Fri Jan 31, 2003 12:30 pm
Location: Wien
Contact:

Post by webchills »

Ich verwende nun folgendes:

Code: Select all

$where = $where.'('.SQLPREFIX."faqdata.keywords LIKE '%".$keys[$i]."%') AND ".SQLPREFIX.'faqdata.active = \'yes\'';
statt:

Code: Select all

$where = $where.'('.SQLPREFIX."faqdata.thema LIKE '%".$keys[$i]."%' OR ".SQLPREFIX."faqdata.content LIKE '%".$keys[$i]."%' OR ".SQLPREFIX."faqdata.keywords LIKE '%".$keys[$i]."%') AND ".SQLPREFIX.'faqdata.active = \'yes\'';
Wenn die keywords für jeden Beitrag gut definiert sind, liefert jetzt auch die MSSQL Suche brauchbare Ergebnisse.

Danke für den Tip

Jörg
webchills
Posts: 26
Joined: Fri Jan 31, 2003 12:30 pm
Location: Wien
Contact:

Post by webchills »

Ich möchte die FAQ auf 1.5.5 umstellen und beibehalten, dass nur die Keywords durchsucht werden. Mit der 1.5.5 (stable snapshot) funktioniert meine Änderung der Suchfunktion nicht mehr, es werden auch die Inhalte durchsucht, auch wenn ich die Suchfunktion in der functions.php wie vorher auf

Code: Select all

$where = $where.'('.SQLPREFIX."faqdata.keywords LIKE '%".$keys[$i]."%') AND ".SQLPREFIX.'faqdata.active = \'yes\'';
ändere.
Gibt es hierfür eine Lösung?
Thorsten
Posts: 15739
Joined: Tue Sep 25, 2001 11:14 am
Location: #phpmyfaq
Contact:

Post by Thorsten »

Hi,

kannst du mal vor der Zeile 298 mit

Code: Select all

return $this->query($query);
in der inc/mssql.php ein

Code: Select all

print $query;
einfügen und dann hier posten, wie das Query aussieht?

bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
webchills
Posts: 26
Joined: Fri Jan 31, 2003 12:30 pm
Location: Wien
Contact:

Post by webchills »

Code: Select all

SELECT bb_faqdata.id AS id, bb_faqdata.lang AS lang, bb_faqcategoryrelations.category_id AS category_id, bb_faqdata.thema AS thema, bb_faqdata.content AS content FROM bb_faqdata LEFT JOIN bb_faqcategoryrelations ON bb_faqdata.id = bb_faqcategoryrelations.record_id AND bb_faqdata.lang = bb_faqcategoryrelations.record_lang WHERE ( (bb_faqdata.thema LIKE '%Browser%' OR bb_faqdata.content LIKE '%Browser%' OR bb_faqdata.keywords LIKE '%Browser%') AND bb_faqdata.active = 'yes')
Thorsten
Posts: 15739
Joined: Tue Sep 25, 2001 11:14 am
Location: #phpmyfaq
Contact:

Post by Thorsten »

Hi,

die Änderung muss hier rein:

Code: Select all

		if (!empty($where)) {
			$query .= " (".$where.")";
        }
bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
webchills
Posts: 26
Joined: Fri Jan 31, 2003 12:30 pm
Location: Wien
Contact:

Post by webchills »

yep das wars, Danke!
Post Reply