Wikipedia:Technik/Baustellen/Suchergebnis direkt anspringen

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Wunsch für ein neues Gadget. Möglicherweise auszubauen als direkte Server-Unterstützung.

  • Bei der Suche nach Schlüsselbegriffen soll direkt die Fundstelle angesprungen werden können.
  • Alle Fundstellen der Suchzeichenketten sollen markiert werden.

Suchergebnisliste[Quelltext bearbeiten]

Wenn bei der Suche nach Schlüsselbegriffen auf Spezial:Suche Ergebnisse vorliegen, soll nicht nur zur gesamten Seite, sondern auch direkt zum (ersten) Vorkommen des Suchworts (oder einer Schreibvariante) gesprungen werden können: Suchergebnis.

  • Auf Spezial:Suche wäre zusätzlich bei jedem Einzelergebnis zur vorhandenen URL-Verlinkung ein weiteres URL-Link einzufügen. In vielen Fällen wird man die Gesamt-Seite ab Einleitung aufrufen wollen, was über das bestehende Link weiterhin möglich sein muss. In anderen Situationen sucht man nach der Erwähnung des Schlüsselbegriffs im Kontext und nicht nach der vollen Seite und müsste auf der Zielseite erst umständlich nach dem Wort suchen.
  • Die zusätzliche URL kann schlicht einen URL-Parameter (etwa ?goto=URL-Escaped-Word) an die normale URL anhängen. Theoretisch käme auch &goto= in Frage; allerdings handelt es sich um schlichte Links auf die Seite, die kaum Parameter vererben würden.
  • Das Ziel-Wort ist das erste in Fettschrift angezeigte Wort des Kontextes. Dies ist meist auch einer der Schlüsselbegriffe, nach denen gesucht wurde. Dabei ist aber zu beachten, dass grammatikalische Variationen auftreten können und die ursprüngliche Schreibung des Suchworts im Text vielleicht gar nicht auftritt. Außerdem enthält der von der internen Suchmaschine (Lucene) ausgewertete Text keine Sonderzeichen, also etwa Satzzeichen. Würde man nach einer exakten Übereinstimmung mit dem in der Ergebnisliste dargestellten Textausschnitt in der Zielseite suchen wollen, bliebe dies häufig erfolglos.
  • Weiterhin sollen die Vorkommen der ursprünglichen Zeichenketten sowie die tatsächlich gefundenen Formen der Suchworte hervorgehoben werden. Auch hierfür muss die URL um einen Parameter und eine entsprechend kodierte Abfolge von Wörtern erweitert werden.

Zielseite[Quelltext bearbeiten]

  • Das Gadget ist auch beim Aufbau der Zielseite wachsam und erkennt am goto= etc., dass die Suche nach dem Schlüsselwort gewünscht ist.
  • Es können die Text-Content aller HTML-Elemente auf Block-Level (div, p, hn, li) nach dem Suchwort durchsucht werden. Maßgeblich wäre das Block-Element, also der zugehörige Absatz. Gegenüber dem umgebenden Seitenrahmen wäre dies eine einheitliche Verschachtelungstiefe des Content. Zu jedem Block-Element lässt sich der sichtbare Textinhalt ohne Markup auswerten.
  • Es wird weniger wünschenswert sein, wenn die obere Bildschirmkante grade das Suchwort touchiert. Der Satzanfang wäre anzuzeigen, also einige Zeilen oberhalb des Suchworts. Das müsste sich durch den Absatz, in dem die Fundstelle liegt, bei nicht allzu bleiwüstigen Texten erreichen lassen.
  • Standardmäßig und zuverlässig haben nur <A>-Elemente die mit JS auswertbaren Koordinaten x (und y). Die Kenntnis der x-Koordinate wäre erforderlich, um an die richtige Stelle scrollen zu können. Damit wäre routinemäßig das Einfügen von <a id="..."> erforderlich, um über die x-Koordinate zum Kontext zu gelangen. Dann würde es aber ausreichen zu prüfen, ob das Block-Element zufällig schon eine id hat, und ansonsten einen Standard-Wert für id setzen. Beginnend mit einem Buchstaben, könnte das GOTO_Suchwort sein (encoded), oder ein konstantes Wort.
  • Ist das Block-Element nun mit id=Anker versehen, kann die document.URL mit angehängtem #Anker überschrieben werden, unter Streichung des goto= zur Vermeidung einer Endlosschleife und optischen Verfeinerung. Der Seitenname ist ohnehin bereits bekannt; die URL kann im Prinzip neu gebildet werden, da von der Suchergebnisliste aus ohnehin nur statische URL benutzt werden.
  • Die Hierarchie des gefundenen Block-Elements kann durchsucht werden, ob das Schlüsselwort geschlossen innerhalb des Text-Content eines Kindes liegt. In diesem Fall wäre eine optische Markierung leicht zu gestalten, etwa mit einem breiten grünen Rand. Die Gestaltung kann im Gadget individuell konfiguriert werden.
  • Wenn die Suchphrase aus mehreren zusammenhängenden Wörtern besteht und im Zieltext nicht auffindbar ist, müssten von hinten nach vorn einzelne Wörter weggelassen werden; es kann sein, dass Satzzeichen dazwischen standen. Umgekehrt kann ausgenutzt werden, dass die Wortgrenzen bekannt sind und damit die Treffergenauigkeit verbessert werden. Bei mehreren zusammenhängenden Wörtern kann aber besser von vornherein unterstellt werden, dass sich dazwischen beliebige nicht-wortkonstituierende Zeichen befinden. Und noch besser: An Dummy-Texten erproben, welche Sonderzeichen Lucene bei der Suche ignoriert und gar nicht hinterlegt, und ob bestimmte Sonderzeichen dann doch gelegentlich im Suchergebnis auftauchen (Semikolon und Doppelpunkt werden beispielsweise als eigenständige Wörter separiert).
  • Lucene durchsucht den Wikitext und nicht die generierte HTML-Seite. Es kann sein, dass die Suchwörter in der Zielseite überhaupt nicht (Kommentare) oder kaum auffindbar (Dateinamen, URL-Bestandteile) außerhalb des sichtbaren Text-Content auftreten.
  • Eine Markierung aller an der Suche beteiligten Schlüsselwörter und aller ihrer Vorkommen in allen Schreibweisen in der Seite wird sich nicht sinnvoll über goto= auslösen lassen.

Internationalisierung[Quelltext bearbeiten]

  • Ein JS-Gadget wäre für den internationalen Einsatz geeignet; dies bei der Programmierung von vornherein zu berücksichtigen.

Server/PHP[Quelltext bearbeiten]

Grundsätzlich könnte, nachdem sich weltweiter Bedarf erwiesen hat, die ID last minute in die ausgelieferte HTML-Seite eingefügt werden und die URL entsprechend auf das Fragment umdirigiert werden. Ob man dann auch gleich eine farbige Unterlegung des Schlüsselworts per CSS-Klasse vornähme?

Teilweise Realisierung[Quelltext bearbeiten]