Suchfunktion unter MS SQL
Moderator: Thorsten
Suchfunktion unter MS SQL
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
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
Re: Suchfunktion unter MS SQL
Hi,
bye
Thorsten
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.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
Das ist im RC6 behoben.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.
bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
amazon.de Wishlist
Hi,
es macht schon Sinn, denn auch die Keywords werden bei MSSQL abgefragt.
bye
Thorsten
es macht schon Sinn, denn auch die Keywords werden bei MSSQL abgefragt.
bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
amazon.de Wishlist
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.
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
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
amazon.de Wishlist
Ich verwende nun folgendes:
statt:
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
Code: Select all
$where = $where.'('.SQLPREFIX."faqdata.keywords LIKE '%".$keys[$i]."%') AND ".SQLPREFIX.'faqdata.active = \'yes\'';
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\'';
Danke für den Tip
Jörg
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
ändere.
Gibt es hierfür eine Lösung?
Code: Select all
$where = $where.'('.SQLPREFIX."faqdata.keywords LIKE '%".$keys[$i]."%') AND ".SQLPREFIX.'faqdata.active = \'yes\'';
Gibt es hierfür eine Lösung?
Hi,
kannst du mal vor der Zeile 298 mit in der inc/mssql.php ein einfügen und dann hier posten, wie das Query aussieht?
bye
Thorsten
kannst du mal vor der Zeile 298 mit
Code: Select all
return $this->query($query);
Code: Select all
print $query;
bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
amazon.de Wishlist
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')
Hi,
die Änderung muss hier rein:
bye
Thorsten
die Änderung muss hier rein:
Code: Select all
if (!empty($where)) {
$query .= " (".$where.")";
}
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
amazon.de Wishlist