Session-Id aus URI löschen um doppelten Content zu vermeiden

Keine Scheu, hier darf alles gefragt und diskutiert werden. Das ist das Forum für YaCy-Anfänger. Hier kann man 'wo muss man klicken' fragen und sich über Grundlagen zur Suchmaschinentechnik unterhalten.
Forumsregeln
Hier werden Fragen beantwortet und wir versuchen die Probleme von YaCy-Newbies zu klären. Bitte beantwortete Fragen im YaCy-Wiki http://wiki.yacy.de dokumentieren!

Session-Id aus URI löschen um doppelten Content zu vermeiden

Beitragvon Micha » Mo Jul 29, 2013 1:03 pm

Hallo,

ich sammle gerade erste Erfahrungen mit YaCy. Ziel soll sein, ein Portal zu indizieren. Hierbei haben wir festgestellt, dass viele Seiten mehrfach im Index landen, da in der URI eine Session-ID enthalten ist. Der Wunsch, dass diese aus der URI entfernt wird, um doppelten Content zu vermeiden, scheint nicht neu zu sein, vgl. URLs verändern oder Session IDs erkennen und filtern. Leider habe ich keinen Weg gefunden, der dies auch realsiert.

Die indizierten URIs sehen wie folgt aus und werden durch ein CMS generiert:
Code: Alles auswählen
http://example.org/Foo/bar/bar.html;jsessionid%3D04F27B8E7AF9E1ECFB9DA73FF2C365B2?lang=de


Aufgrund des Länderzusatzes (lang=de) ist Akzeptiere URLs mit '?' / dynamische URLs aktiviert. In einen der Beiträge wurde darauf hingewiesen, dass mit der Datei defaults/session.names zu arbeiten ist. In dieser Datei steht bei uns

Code: Alles auswählen
PHPSESSIONID
PHPSESSID
jsessionid
sid


Der Eintrag jsessionid ist also vorhanden, scheint aber nicht gefiltert zu werden. Kann mir einer kurz beschreiben, was ich einstellen muss, damit bestimmte Seiten nicht mehrfach indiziert werden?

Vielen Dank
Micha
Micha
 
Beiträge: 7
Registriert: Fr Jul 19, 2013 7:21 am

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon gaston » Mo Jul 29, 2013 1:36 pm

Hallo,

du kannst dir meine Blacklist von Peer 28112011 herunterladen, damit werden viele SessionIDs und unnötige Seiten gefiltert.

Gruß,
gaston
gaston
 
Beiträge: 143
Registriert: Fr Jan 06, 2012 2:22 pm

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon Micha » Mo Jul 29, 2013 1:53 pm

Hallo gaston,

gaston hat geschrieben:du kannst dir meine Blacklist von Peer 28112011 herunterladen, damit werden viele SessionIDs und unnötige Seiten gefiltert.


Danke für Deine Antwort. Was heißt gefiltert? Ein
Code: Alles auswählen
.*jsessionid.*
hilft mir nicht, wenn dadurch die Seite überhaupt nicht indiziert wird. Zum anderen, wie lade ich Deine Blacklist herunter?

Schöne Grüße
Micha
Micha
 
Beiträge: 7
Registriert: Fr Jul 19, 2013 7:21 am

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon gaston » Mo Jul 29, 2013 2:05 pm

Hallo

also herunterladen/importieren kannst du die unter http://127.0.0.1:8090/BlacklistImpExp_p.html

Stimmt, indiziert wird so nichts, aber bis es da eine Lösung gibt schone ich lieber mein Peer.

Wie du schon festgestellt hast ist es ein altes und leider immer noch vorhandenes Problem.

Gruß
gaston
gaston
 
Beiträge: 143
Registriert: Fr Jan 06, 2012 2:22 pm

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon Micha » Mo Jul 29, 2013 2:26 pm

Hallo gaston,

gaston hat geschrieben:also herunterladen/importieren kannst du die unter http://127.0.0.1:8090/BlacklistImpExp_p.html

Hmm, da war ich schon. Vermutlich sollte mir Dein Peer im PullDown-Menü unter "anderen YaCy Peers" angezeigt werden, wird er aber nicht. Hierzu sind ggf. noch Einstellungen an der Firewall notwendig, die unsere IT-Abteilung vornehmen müsste.

gaston hat geschrieben:Stimmt, indiziert wird so nichts, aber bis es da eine Lösung gibt schone ich lieber mein Peer.

Ja, das kann ich verstehen. ;-) Das Problem ist aber, dass es sich um ein Portal handelt, welches wir hier inhaltlich pflegen. Wenn das also nicht vernünftig indiziert werden kann, sinkt der angedachte Nutzen gerade gegen Null. :roll:

gaston hat geschrieben:Wie du schon festgestellt hast ist es ein altes und leider immer noch vorhandenes Problem.

Da die gefundenen Beiträge zum Teil schön älter als 5 Jahre waren, hatte ich gehofft, dass hier inzwischen eine Lösung gefunden wurde. Suchmaschinen wie google oder bing haben das Problem ja auch - irgendwie - gelöst.

Welche Funktion hat die Datei defaults/session.names eigentlich? Sessions werden doch i.d.R. an die URI als Parameter angefügt. Wenn die Option dynamische URLs deaktiviert ist, fallen diese Adressen automatisch weg. Wenn die Option aktiviert ist, wie bei mir, scheint es aber auch keine Wirkung zu haben?!

Schöne Grüße
Micha
Micha
 
Beiträge: 7
Registriert: Fr Jul 19, 2013 7:21 am

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon gaston » Mo Jul 29, 2013 2:58 pm

Hallo Micha

also "defaults/session.names" sollte eigentlich die SessionIDs URLs filtern (also kein indizieren). Genaueres kann dir eigentlich nur der Hauptentwickler Orbiter sagen, mir kommt es so vor als ob es nach dem Wechsel zu "Solr" noch nicht alles so rund läuft. YaCy ist halt auch Spielwiese, wo vieles ausprobiert wird (vielleicht auch zu viel).

Es aber bestimmt machbar, nur ist der Sourcecode leider sehr komplex. Mal sehen wohin die reise geht ;)

Hier mal meine Liste (yacy\DATA\LISTS\)
url.default.zip
(1.14 KiB) 63-mal heruntergeladen


Gruß
gaston
gaston
 
Beiträge: 143
Registriert: Fr Jan 06, 2012 2:22 pm

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon Quix0r » Mo Jul 29, 2013 7:01 pm

Damit gibt es allerdings ein Problem:

Einigen Seiten koennten "defekt" sein und ausversehen einem Bot eine Session-Id in der URL anbieten. Auch wird das nicht-crawlen von URLs mit ? drinne (bietet YaCy standardmaessig an) problematisch sein, da noch nicht jede Seite "fancy URLs" haben (also mit mod_rewrite arbeiten). Deswegen lasse ich den Peer (momentan wieder nicht, OutOfMemoryError) einfach crawlen.
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon Micha » Di Jul 30, 2013 7:26 am

Hallo gaston,

gaston hat geschrieben:nur ist der Sourcecode leider sehr komplex.


Durch aus. Mein Problem hört sich zunächst nicht sonderlich schwierig an: Nimm die URI, entferne die Session-Id, Prüfe, ob sie schon im Index ist und speichere ggf. Wenn es jedoch so einfach wäre, würde es wohl bereits integriert sein. ;-)

Danke für Deine Black-List. Der RegEx

Code: Alles auswählen
.*.*/.*(?i:(?:sess(?:ion)?id)|jsessionid|(?<!w)sid[^e\-]).*


wird mir wohl das Genick brechen, wenn ich das Portal indizieren möchte.

Quix0r hat geschrieben:Einigen Seiten koennten "defekt" sein und ausversehen einem Bot eine Session-Id in der URL anbieten.

Das macht nichts. Einige Seiten könnten auch nicht verfügbar sein, wenn der Bot gerade drauf und dran war, sie zu indizieren. Mir geht es nicht um den Worst-Case-Fall sondern um den Standard und der sieht bei heutigen CMS, Foren, Blogs, ... doch eher so aus, dass diese Seiten nicht statisch sind. Im Portal wird übrigens mit mod_rewrite gearbeitet. Im Browser sieht man in der Adressleiste auch nichts von der Session-Id, weil Cookies idR. akzeptiert werden.

Ich bin für weitere Vorschläge offen.

Schöne Grüße
Micha
Micha
 
Beiträge: 7
Registriert: Fr Jul 19, 2013 7:21 am

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon Micha » Di Jul 30, 2013 2:23 pm

Hallo,

ich habe nun ein wenig im Quellcode der Klasse MultiProtocolURI gelesen und bin auf die Methode
Code: Alles auswählen
getFile(excludeAnchor, removeSessionID)
gestoßen, die wohl genau das machen soll, was ich suche. Teste ich die URI

Code: Alles auswählen
http://www.scc.kit.edu/publikationen/80.php?PHPSESSID=5f3624d3e1c33d4c086ab600d4d5f5a1


und erzwinge in der Methode mit removeSessionID=true das Ersetzen, erhalte ich

Code: Alles auswählen
http://www.scc.kit.edu/publikationen/80.php


Scheint also zu arbeiten. Bei meiner gezeigten URL gehts nicht. Vermutlich ist die Kombination/Reihenfolge aus ; und ? nicht entsprechend der Richtlinie. Ich denke, dass lässt sich irgendwie korrigieren. Was ich nun suche, ist die Einstellung, die ich setzen muss, damit getFile mit dem Parameter removeSessionID=true aufgerufen wird. Hat einer von Euch hier eine Idee?

Schöne Grüße
Micha
Micha
 
Beiträge: 7
Registriert: Fr Jul 19, 2013 7:21 am

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon Orbiter » Di Jul 30, 2013 3:22 pm

hallo,
ja der Crawler sollte eigentlich die Session-ID aus den gefundenen Links entfernen, das wird auch so aufgerufen. Ob das Semikolon mit entfernt wird, kann ich nicht sagen; womöglich nicht.
Kannst du mir per PM die genaue URL senden die du zum Crawl Start verwendet hast, die aus deinem Beispiel erzeugt bei mir nämlich gar keine session ID. Mit einer Test-URL kann ich das durchtracen und gucken woran es hängt.
Orbiter
 
Beiträge: 5787
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon Micha » Di Jul 30, 2013 9:09 pm

Guten Abend Orbiter,
Orbiter hat geschrieben:ja der Crawler sollte eigentlich die Session-ID aus den gefundenen Links entfernen, das wird auch so aufgerufen.

Okay, dann liegt es wohl nur an meinen schlechten Links - siehe unten, was ich damit meine

Orbiter hat geschrieben:Ob das Semikolon mit entfernt wird, kann ich nicht sagen; womöglich nicht.

Das Semikolon ist nicht das Problem, meine ich. Das Fragezeichen leitet wohl (immer) die zusätzlichen Parameter ein. Zusätzliche Parameter können durch ein & oder durch ein ; voneinander getrennt sein aber als erstes scheint das Fragezeichen Pflicht zu sein:

Code: Alles auswählen
http://example.org/bar.html;jsessionid%3D04F27B8E7AF9E1ECFB9DA73FF2C365B2?lang=de
---------------------------^
--------------------------------------------------------------------------^


Die Reihenfolge stimmt nicht, es müsste wohl
Code: Alles auswählen
http://example.org/bar.html?jsessionid%3D04F27B8E7AF9E1ECFB9DA73FF2C365B2;lang=de

lauten. Das meine ich in meinem letzten Posting mit dass lässt sich irgendwie korrigieren - das Problem liegt also an der Seite und nicht an YaCy.

Orbiter hat geschrieben:Die aus deinem Beispiel erzeugt bei mir nämlich gar keine session ID.

example.org ist nur eine Beispieldomain.

Vielen Dank für Deine Hilfe.
Micha
Micha
 
Beiträge: 7
Registriert: Fr Jul 19, 2013 7:21 am

Re: Session-Id aus URI löschen um doppelten Content zu verme

Beitragvon Micha » Do Aug 01, 2013 1:24 pm

Hallo zusammen,

da ich die URLs im Moment nicht umbauen kann, bin ich den umgekehrten Weg gegangen und habe den Quellcode so angepasst, dass er die URLs korrekt zusammensetzt - siehe unten. Danach habe ich erneut einen Suchvorgang gestartet. Die sich nun im Index befindlichen Adressen liegen alle ohne Session-Id vor. ;-)

Schöne Grüße
Micha

Code: Alles auswählen
    private void identSearchpart() {
       if (this.path.indexOf('?') >= 0 && this.path.indexOf(';') >= 0 && this.path.indexOf('?') > this.path.indexOf(';')) {
          this.path = this.path.replaceFirst("\\?", ";").replaceFirst(";", "?");
       }
       else if (this.path.indexOf('?') < 0 && this.path.indexOf(';') >= 0) {
          this.path = this.path.replaceFirst(";", "?");
       }

        // identify quest in file
        final int r = this.path.indexOf('?');
              
        if (r < 0) {
            this.searchpart = null;
        } else {
            this.searchpart = this.path.substring(r + 1);
            // strip &amp;
            Matcher matcher = ampPattern.matcher(this.searchpart);
            while (matcher.find()) {
                this.searchpart = matcher.replaceAll("&");
                matcher.reset(this.searchpart);
            }
            this.path = this.path.substring(0, r);
        }
    }
Micha
 
Beiträge: 7
Registriert: Fr Jul 19, 2013 7:21 am


Zurück zu Hilfe für Einsteiger und Anwender

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron