Page 1 of 1

Artikel mit ähnlichen Themen doch nicht ähnlich

Posted: Wed Dec 19, 2007 8:40 am
by Joaquin
Bei der Tag-Funktion, ähnliche Themen anzuzeigen, bekomme ich bei meinen Artikeln hauptsächlich die Artikel neueren Datums angezeigt und nicht jene, die thematisch zu den Tags des Artikels gehören würden.

Was läuft da falsch?

Re: Artikel mit ähnlichen Themen doch nicht ähnlich

Posted: Wed Dec 19, 2007 12:52 pm
by garvinhicking
Hi!

Beispiele? Nenn uns mal einen Artikel, und welche Artikel du bei diesem als "ähnliche themen" erwarten würdest?

Grüße,
Garvin

Posted: Wed Dec 19, 2007 2:38 pm
by Joaquin
Nehmen wir z.B. den folgenden Artikel:
http://weblogger.joaquinenriquez.com/ar ... -Dick.html

Dieser hat z.B. die Tags "diät" und "soziales".

Nun werden dort nur verwandte Artikel angezeigt, welche den Tag "soziales" haben, aber nicht ein einziger mit dem Tag "diät" und dies obwohl es noch andere Artikel gibt, welche ebenfalls beide Tags verwenden.

Sinnvoll wäre es doch, hier zuerst Artikel vorzuschlagen, welche die größtmögliche Tagverwandschaft haben.

Auch eine Streuung der Tags und nicht die Fixierung auf nun einen Tag, würde evtl. hier bessere Ergebnisse liefern.

Posted: Wed Dec 19, 2007 10:45 pm
by garvinhicking
Hi!

In der serendipity_event_freetag.php ist in ungefähr zeile 380 folgendes:

Code: Select all

        $q = "SELECT DISTINCT e1.entryid,
                     e2.title,
                     e2.timestamp
                FROM {$serendipity['dbPrefix']}entrytags AS e1
           LEFT JOIN {$serendipity['dbPrefix']}entries   AS e2
                  ON e1.entryid = e2.id
               WHERE e1.tag IN ('" . implode("', '", $tags) . "')
                 AND e1.entryid != " . (int)$postID . "
                 AND e2.isdraft = 'false'
                     " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e2.timestamp <= " . time() : '') . "
            ORDER BY  e2.timestamp DESC
               LIMIT " . $this->get_config('show_related_count', 10);
Das ist, was für die Abfrage verändert werden muss. Probiere mal bitte folgendes:
$q = "SELECT DISTINCT e1.entryid,
e2.title,
e2.timestamp,
count(e2.id) AS relativity
FROM {$serendipity['dbPrefix']}entrytags AS e1
LEFT JOIN {$serendipity['dbPrefix']}entries AS e2
ON e1.entryid = e2.id
WHERE e1.tag IN ('" . implode("', '", $tags) . "')
AND e1.entryid != " . (int)$postID . "
AND e2.isdraft = 'false'
" . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e2.timestamp <= " . time() : '') . "
GROUP BY e2.id
ORDER BY relativity, e2.timestamp DESC
LIMIT " . $this->get_config('show_related_count', 10);
I try to group this query by the entryid, so that the more often the same entry is found, the higher a counter variable ("relativity") gets. If results are sorted by this criteria, it should yield those entries first that share the highest tag-count...in theory. :)

Regards
Garvin

Posted: Mon Dec 24, 2007 12:52 pm
by blog.brockha.us
Das gleiche ist mir auch schon mehrmals aufgefallen. Es sollten erst die Artikel kommen, die alle Tags haben, dann die, die fast alle haben usw. Erst dieses Ergebnis sollte dann nach Datum sortiert werden.
Wollte ich immer schon mal als Option einbauen, bisher leider nie zu gekommen..

Posted: Tue Dec 25, 2007 12:21 pm
by Joaquin
Den Code habe ich eingebaut und funktioniert auch so etwas besser als es vorher ging.
Die Lösung von Brockhaus wäre natürlich optimal. Schon eine Ahnung, wann Du es realisieren könntest?

Posted: Tue Dec 25, 2007 1:01 pm
by blog.brockha.us
Leider gerade keine Ahnung, weil ich schon wieder ziemlich im Projektstress bin.

Posted: Wed Dec 26, 2007 1:27 pm
by garvinhicking
Hi Grischa!

HAst Du mein SQL mal ausprobierT? Was daran klappt noch nicht?

Grüße,
Garvin