Suche ignoriert #, Suche nach Hashtags nicht möglich

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by Dr. Love »

Hallo zusammen,

ich baue mir gerade eine Lösung zusammen, die #Hashtags in meinen Posts mit einem Link zur Suche versieht, so dass man andere Beiträge finden kann, die dieses Hashtag beinhalten. Leider ignoriert die Suche ein #, so dass sie bei einer Suche nach "#Serendipity" auch alle Beiträge findet, die "Serendipity" beinhalten.

Anführungszeichen um den Suchbegriff verhindern wenigstens, dass bei "#Vi" auch "Virus" gefunden wird, aber ich brauche wirklich eine Suche, die nur "#Vi" findet und vorzugsweise auch nicht "#Virus", aber das ist eine Schwierigkeitsstufe weiter.

Geht das mit der eingebauten Suche oder ist das Ignorieren des # hardcoded?

Liebe Grüße,
spackmat

P.S. falls es jemanden interessiert, die quick-and-diry-Lösung zum Verlinken von Hashtags funktioniert mit dem Regexp-Plugin und folgender Hashtags.php:

Code: Select all

global $serendipity;
$regexpArray = array(
    'SearchArray' => array('@(?<!\w)#(\(([^\<\>\n\r]{1,140}?)\)|(\w+))(?!(?!.*?\<a).*\<\/a)(?![^<]*?\>)@iu'),
    'ReplaceArray'=> array('<a href="' . $serendipity['serendipityHTTPPath'] . PATH_SEARCH . '/%23$1" class="hashtag">#$2$3</a>')
);
Das funktioniert schon mal so weit und lässt Hashtags innerhalb von Links in Ruhe und auch innerhalb eines HTML-Tags. Zudem unterstützt das eine erweiterte Syntax für Hashtags: #(Hash tag) und #(Hashtag)s. Der Verlinkung fehlt noch ein URL-Encoding, aber das geht mit dem Regexr-Plugin nicht, wenn man sich daran hält, dass der e-Schalter ab PHP 5.5 deprecated ist und wir keinen PHP-Code innerhalb von preg_replace mehr machen können. Langfristig muss man also ein eigenes Hashtag-Plugin schreiben.
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by Timbalu »

Generelles zu den Möglichkeiten und Beschränkungen der Serendipity/Mysql Suche hier: http://board.s9y.org/viewtopic.php?f=10 ... #p10428376

Außerdem ist die Suche nach bestimmten Key-Wörtern (Serendipity/S9y) dadurch erschwert, dass auch Vorkommen von link und image HTML-tags gefunden werden (die zb irgendein Tag attribut mit dem gesuchten Namen haben). Dh. also, Anzahl der gefundenen Wörter entspricht nicht immer unbedingt der Anzahl der gezeigten Posts.

Könnte man nicht statt #hashtag/Suche, den #hashtag mit einem freetag verknüpfen? Dann hättest du das verbindende Element zu anderen relevanten Entries ja schon in/mit der freetag Wolke.
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by Dr. Love »

Die Beschränkungen aus dem genannten Thread sind hier nicht das Problem. Scheinbar filtert S9Y die Raute einfach raus, bevor die Datenbank befragt wird, denn direkt auf der Datenbank gibt es einen Unterschied zwischen LIKE '%#Hashtag%' und LIKE '%Hashtag%'.

Freetags sind keine Lösung, sondern Teil des Problems. Die sind bei mir über die Jahre total ausgeufert und sind zu einer kruden Mischung aus Quasi-Kategorien-Taxonomie und Einmal-Verschlagwortung geworden. Im Ergebnis sind sie nutzlos und quälen mich bei jedem neuen Eintrag erneut. Daher will ich die Verschlagwortung über Hashtags regeln, die gehen mir beim Schreiben total selbstverständlich von der Hand.

Nur leider spuckt mir die S9Y-Suche scheinbar in die Suppe, indem sie die Raute ignoriert und das Konzept damit ad absurdum führt. Kennt sich jemand mit den Suchinterna aus und hat eine Lösung für mich? Wo steckt die Suche eigentlich im Code? Ich konnte sie auf die Schnelle nicht finden.
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by Timbalu »

Dr. Love wrote:Wo steckt die Suche eigentlich im Code? Ich konnte sie auf die Schnelle nicht finden.
https://github.com/s9y/Serendipity/blob ... c.php#L745
Regards,
Ian

Serendipity Styx Edition and additional_plugins @ https://ophian.github.io/ @ https://github.com/ophian
onli
Regular
Posts: 2829
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by onli »

Dr. Love wrote:Wo steckt die Suche eigentlich im Code? Ich konnte sie auf die Schnelle nicht finden.
In der index.php wird der searchTerm das erste mal gefiltert:

Code: Select all

$serendipity['GET']['searchTerm'] = urldecode(htmlspecialchars(strip_tags(implode(' ', $search))));
Dann wird in der include/genpage.inc.php serendipity_searchEntries aufgerufen, das ist in include/function_entries. Dort wird nochmal ein

Code: Select all

$term = serendipity_db_escape_string($term); 
ausgeführt, das hat ja nach verwendeter Datenbank andere Ergebnisse, und findet sich in der /include/db/verwendete-datenbank.inc.php
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by Dr. Love »

Perfekt, danke für die Hinweise. Das Problem liegt bei der Indexed Search von MySQL, direkt auf der Datenbank bringen folgende zwei Abfragen das gleiche Ergebnis, zudem kommt die Raute am Ende in der SQL-Abfrage von S9Y vor:
SELECT * FROM `s9y_entries` WHERE (MATCH(title,body,extended) AGAINST('Serendipity'))

SELECT * FROM `s9y_entries` WHERE (MATCH(title,body,extended) AGAINST('#Serendipity'))
Die zweite Abfrage müsste deutlich weniger Treffer ergeben. Es sieht also so aus, als müsste ich vorerst damit leben.

Mittelfristig muss ich eine Lösung dafür finden, etwa ein eigener Index für die Hashtags, der beim Speichern eines Eintrags aktualisiert wird. Das würde auch das Problem mit den geklammerten #(Hashtag)s und einem ungeklammerten #Hashtag gleich mit lösen, ebenfalls das Problem mit #Vi und #Virus. Die Frage ist, ob ich das noch in S9Y implementiere oder warte, bis ich mein Blog auf ein anderes System migriert habe und das dann für dieses System löse.
onli
Regular
Posts: 2829
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by onli »

Das mit dem Index sollte gar nicht so schwer sein, im Zweifel geht das per Plugin.

Aber Ian hat schon recht: Hashtags sind Tags, nur mit nem anderen Interface. Ich würde dir nahelegen, dass besser in die Richtung zu implementieren (hashtags auf tags mappen, das geht ebenfalls per Plugin recht einfach). Müsste du dann eben mit einem aufräumen der Tags kombinieren. Würde das auch mit dem anstehenden Wechsel des Systems - wenn das eh geplant ist - zusammenlegen.
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by Dr. Love »

Klar sind das im Grunde auch nur Tags. Wofür ich die Freetags bei S9Y ein wenig missbrauche ist eigentlich ein Kategoriensystem. Wordpress etwa kann die Kategorien in einer hierarchischen Taxonomie verwalten. Eigentlich brauche ich sowas, dann wären die Freetags frei für ihren eigentlichen Zweck. Mein Problem mit Freetags ist momentan in erster Linie die ausufernde Liste, die irgendwann einfach nur noch unübersichtlich ist und mir Angst macht, noch bevor ich einen neuen Beitrag geschrieben habe (und deswegen blogge ich viele kleinere Sachen inzwischen mal eben schnell bei Google+). Mir gefällt einfach den freie Ansatz von Hashtags so gut, das Interface passt mir genau in den Kram, auch für die Leser.

Da S9Y kein so mächtiges Kategoriensystem hat, kann ich Freetags und Hashtags, auch wenn ich aufräumen würde, nicht zusammenführen. Aufräumen in meinem Sinne hieße eben gerade, dass ich die Einmal-Tags in Hashtags umwandle und in den Freetags nur noch die schlankere Kategorisierung stehen lasse.

Aber extra ein komplexes Plugin mit Datenbank und Inhalteparser zu schreiben, ist mir zu viel Aufwand gemessen daran, dass ich von S9Y aus verschiedenen Gründen sowieso weg will. Aber das wäre die beste Lösung, keine Frage.
onli
Regular
Posts: 2829
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by onli »

Alles klar. Hashtags als Interface für Tags sind auch durchaus ne gute Idee.
Dr. Love wrote:Wordpress etwa kann die Kategorien in einer hierarchischen Taxonomie verwalten. Eigentlich brauche ich sowas, dann wären die Freetags frei für ihren eigentlichen Zweck
Oh, ich wusste gar nicht, dass Wordpress da mehr kann als s9y. Hierarchien gehen auch in s9y, was genau fehlt dir - hast du das schon beschrieben?
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by Dr. Love »

Ach, da nutze ich seit fast 10 Jahren S9Y und habe total vergessen, dass es hierarchische Kategorien gibt. Danke für den Hinweis, daraus sollte sich was machen lassen.

Fehlt nur noch das Hashtag-Interface für die Freetags, aber das ist mir momentan zu aufwändig zu implementieren. Problem ist, dass man das dann direkt in gut haben will, also etwa mit einer automatischen live-Erkennung beim Schreiben wie bei Google+, damit man die Kontrolle behält.
onli
Regular
Posts: 2829
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by onli »

Auch das klingt nicht zu kompliziert. Sicher, keine 5-Minuten-Arbeit, aber im Grunde bräuchtest du ja dafür nur ein Plugin, dass…

1. …Autovervollständigung während des Schreibens bereitstellt, wofür es fertige jQuery-Plugins gibt. Das Freetag-Plugin nutzt das bereits optional, falls du dir ein Beispiel ansehen willst. Du würdest eine Liste aller Tags in den Quellcode der Editorseite packen und dann das Plugin starten. Zumindest für den normalen Editor ist das wahrscheinlich wirklich einfach.

2. …beim Speichern den Artikel parst und aus #abc das Tag abc anlegt. Der erste Teil davon ist einfach, der zweite hänge vom freetag-plugin ab, also tendentiell komplizierter als nötig. Aber im Grunde ist ja auch das nur das Absetzen eines Datenbank-Inserts auf die freetag-Tabelle.

So ungern ich persönlich das Freetag-Plugin weiter aufgebläht sehe, das klingt für mich durchaus wie eine Option, die man dann direkt ins Plugin integrieren könnte. Dann wird auch Schritt 2 einfacher, das Speichern der Tags.
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Re: Suche ignoriert #, Suche nach Hashtags nicht möglich

Post by Dr. Love »

Ja, das würde in der Tat eigentlich ins Freetag-Plugin gehören.

Wenn S9Y bei mir eine Zukunft hätte, würde ich das vielleicht sogar selber bauen, als Erweiterung für Freetag oder getrennt davon. (Davon abgesehen habe ich aber auch schlechte Erinnerungen an mein letztes Plugin vor ein paar Jahren, da hatte ich beschlossen, nichts mehr zu S9Y beizutragen. Aber das ist eine andere Geschichte.)
Post Reply