externer zugriff auf den index (API?)

Hier finden YaCy User Hilfe wenn was nicht funktioniert oder anders funktioniert als man dachte. Bei offensichtlichen Fehlern diese bitte gleich in die Bugs (http://bugs.yacy.net) eintragen.
Forumsregeln
In diesem Forum geht es um Benutzungsprobleme und Anfragen für Hilfe. Wird dabei ein Bug identifiziert, wird der thread zur Bearbeitung in die Bug-Sektion verschoben. Wer hier also einen Thread eingestellt hat und ihn vermisst, wird ihn sicherlich in der Bug-Sektion wiederfinden.

externer zugriff auf den index (API?)

Beitragvon thilo » Di Jan 06, 2009 1:48 pm

hallo yacy-community,

ich habe yacy im "robinsom-modus" laufen, um eine liste bestimmter start-urls zu crawlen und einen rein lokalen index zu befüllen.

meine endanwendung sieht so aus, dass ich gerne einige statistische auswertungen über die auf den seiten verwendeten wörter machen würde.

dazu, so sehe ich das gerade, greife ich wohl am einfachsten mit einem externen (selbst geschriebenen, sprache egal) programm auf yacy's index zu wie auf eine datenbank - nur dass diese hier kein sql spricht oder per jdbc/odbc/dbi/... angesprochen werden kann.

meine frage also: gibt es eine API (oder ein kurzes beispiel), wie ich anfragen an die db/den index hinter yacy stellen kann per programm, um an alle daten heranzukommen (wörter, dazugehörige seiten, ...)?

vielen dank und beste grüße,
thilo
thilo
 
Beiträge: 10
Registriert: Di Jan 06, 2009 1:36 pm

Re: externer zugriff auf den index (API?)

Beitragvon Orbiter » Di Jan 06, 2009 3:37 pm

naja, einen Zugriff per XML haben wir nicht, aber wohl einen Zugang über das Webinterface, das man ggf. recht einfach zu einer XML-API erweitern könnte. Kommt drauf an was du brauchst.

Dazu musst du wissen wie das in YaCy organisiert ist: der Wortindex (RWI) besteht aus einer URL-Referenz und einer Attributmenge zu jeder Referenz. Eine Aufsummierung der Attribute bekommst du ganz einfach über das Webinterface:

http://localhost:8080/IndexControlRWIs_ ... ingsearch=

..zeigt dir beispielsweise wieviele Treffer es zu 'java' gibt, und wo die Treffer sind (URL, Titel, Text, Feld mit Betonung/fett u.s.w.). Dann kannst du dort selektieren welche URLs du dazu sehen willst, und wieviele (können ja tausende sein). Mit einem Klick auf 'List selected URLs' bekommst du die URL-Liste in einer Tabelle.

Einen Zugang zu den URLs in der DB hast du in http://lokalhost:8080/IndexControlURLs_p.html
Dort kann man auch einen URL-Export entsprechend Regeln (Filter) anstossen. Das ganze kannst du dann ggf. scripten, bspielsweise mit curl.

Wenn ich dich richtig verstehe, brauchst du genau das, nur eben beispielsweise in einer XML. Das wäre ganz leicht zu machen. Wie würdest du die Daten am liebsten haben?
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: externer zugriff auf den index (API?)

Beitragvon thilo » Mi Jan 07, 2009 7:44 pm

das klingt soch schon ganz vielversprechend, vielen dank!

da ich statistiken über alle gefundenen (bzw. über die häufigsten, jedenfalls nicht unbedingt über vorher bekannte) wörter berechnen will, brauche ich wohl aber eine möglichkeit, nicht nur nach einem bestimmten wort zu suchen, sondern mir *alle* möglichen worte (ja, sind dann viele; vielleicht auch mit der möglichkeit zum einschränken, z.b. sql-ähnlich sowas wie "WHERE word LIKE 'java*'...") aufzählen lassen kann.

(wenn ich das richtig verstanden habe, sind aber nicht zu allen wörtern die url's, auf denen sie vorkommen, gespeichert; eher andersrum ("reverse", also zu einer url die listre der wörter und andere metadaten), da könnte es performance-probleme geben, da ich nach worten, nicht nach url's fragen will, hm? aber immerhin führt ja der erste webinterface-call, den du angegeben hast, die abfrage so rum schon mal aus... nur das ich halt nicht die worte enumerieren kann und daher nicht weiss, was ich habe.)

das ganze würde ich am liebsten komplett innerhalb einer hoch- oder scriptsprache abhandeln, in der ich das ergebnis der abfragen dann in irgendeiner datenstruktur (array oder hash) halten kann. und wegen der großen datenmengen und obiger gemutmaßter performanceprobleme ist xml da eigentlich unnötig. die zu berechnenden statistiken werden dann weiterverarbeitet und irgendwie visualisiert, es handelt sich also nur um zwischenergebnisse. komme ich um das webinterface herum und kann direkt mit java-code auf den index zugreifen?

noch eine weiterführende frage: komme ich auch informationen über die zusammenhänge zwischen webseiten (verlinkung) heran?

beste grüße,
thilo
thilo
 
Beiträge: 10
Registriert: Di Jan 06, 2009 1:36 pm

Re: externer zugriff auf den index (API?)

Beitragvon Orbiter » Mi Jan 07, 2009 9:04 pm

thilo hat geschrieben:(wenn ich das richtig verstanden habe, sind aber nicht zu allen wörtern die url's, auf denen sie vorkommen, gespeichert; eher andersrum ("reverse", also zu einer url die listre der wörter und andere metadaten), da könnte es performance-probleme geben, da ich nach worten, nicht nach url's fragen will, hm? aber immerhin führt ja der erste webinterface-call, den du angegeben hast, die abfrage so rum schon mal aus... nur das ich halt nicht die worte enumerieren kann und daher nicht weiss, was ich habe.)

nein, genau andersherum, also so wie du es brauchst!
Dokument: url -> wort*
RWI: wort -> url*

thilo hat geschrieben:da ich statistiken über alle gefundenen (bzw. über die häufigsten, jedenfalls nicht unbedingt über vorher bekannte) wörter berechnen will, brauche ich wohl aber eine möglichkeit, nicht nur nach einem bestimmten wort zu suchen, sondern mir *alle* möglichen worte (ja, sind dann viele; vielleicht auch mit der möglichkeit zum einschränken, z.b. sql-ähnlich sowas wie "WHERE word LIKE 'java*'...") aufzählen lassen kann.

wir haben keine Wörter gespeichert! Wörter werden nach Wort-Hashes übersetzt, nur die werden gespeichert. Wenn du eine Wortstatistik brauchst, musst du da mit einem Wörterbuch ran gehen und für jedes Wort das fragen, was du wissen willst. Dazu würde o.g. Link helfen, zu dem wir dann wohl ein XML oder JSON interface bräuchten. Du müsstest dann für jedes Wort so eine Anfrage abschicken. Ggf. würde ein Interface für Massenanfragen die Sache beschleunigen, da müsste man aber erst wieder ein wenig mehr bauen.

thilo hat geschrieben:das ganze würde ich am liebsten komplett innerhalb einer hoch- oder scriptsprache abhandeln, in der ich das ergebnis der abfragen dann in irgendeiner datenstruktur (array oder hash) halten kann. und wegen der großen datenmengen und obiger gemutmaßter performanceprobleme ist xml da eigentlich unnötig. die zu berechnenden statistiken werden dann weiterverarbeitet und irgendwie visualisiert, es handelt sich also nur um zwischenergebnisse. komme ich um das webinterface herum und kann direkt mit java-code auf den index zugreifen?

na klar, mit Java! dazu müsstest du dir angucken wie das Servlet zu oben genannten Link die Daten abfragt, und das in einem eigenen Programm integrieren. Ansonsten halt über ein API, dann kannst du das auch in php oder wie du denkst machen.

thilo hat geschrieben:noch eine weiterführende frage: komme ich auch informationen über die zusammenhänge zwischen webseiten (verlinkung) heran?

Ja das gibt es:
http://localhost:8080/xml/webstructure.xml
nach dem Aufruf siehst du erst mal nix im Browser, das liegt daran das der nicht weiss wie er das XML darstellen soll. Von der Seite den Source angucken zeigt dir beispielsweise so was hier:
Code: Alles auswählen
<domain host="www.futurebytes.ch" id="-H3NSB" date="20090106">
  <citation host="www.onlinepc.ch" id="M0cdqA" count="4" />
  <citation host="www.coolest-gadgets.com" id="l5ZJua" count="3" />
  <citation host="www.zeitenwende.ch" id="ZAGpvB" count="4" />
  <citation host="www.mister-wong.de" id="M3KP8B" count="28" />
  <citation host="www.golem.de" id="ons91A" count="3" />
  <citation host="yigg.de" id="fW2nGA" count="28" />
</domain>

das bedeutet, das die Seiten http://www.onlinepc.ch, http://www.coolest-gadgets.com, u.s.w alle einen Link nach http://www.futurebytes.ch haben.
Oder mit anderen Worten: wenn http://www.futurebytes.ch deine Seite wäre, hättest du hiermit eine Antwort auf die Frage 'wer hat einen Link auf meine Seite?'. Das sollte die SEOs eigentlich stark interessieren.
Hier wird nicht eine genaue Verlinkung gespeichert, sondern nur eine Beziehung zwischen den Domänen. Dafür gibt der count an, wie oft der Link von der Domäne auf die andere gefunden wird. Das hier ist also sowas wie ein 'reverse domain index', dabei ist zu beachten das er als unvollständig angesehen werden muss, weil man nur sagen könnte das er vollständig sei wenn man das gesamte Internet abgegrast hätte! Ich hoffe das hilft aber schon mal.
Die id ist übrigens ein Fragment des URL-hashes, und zwar immer die hinteren 6 Stellen des 12-stelligen URL-hashes. Die hinteren 6 Stellen bezeichnen immer die Domäne und sind für alle URLs einer Domäne dann eben auch gleich.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: externer zugriff auf den index (API?)

Beitragvon thilo » Mi Jan 28, 2009 1:14 pm

Sodele... musste für nen Moment Gedanken sortieren und etwas recherchieren, jetzt bin ich wieder zurück.

Orbiter hat geschrieben:Wenn du eine Wortstatistik brauchst, musst du da mit einem Wörterbuch ran gehen und für jedes Wort das fragen, was du wissen willst. Dazu würde o.g. Link helfen, zu dem wir dann wohl ein XML oder JSON interface bräuchten. Du müsstest dann für jedes Wort so eine Anfrage abschicken. Ggf. würde ein Interface für Massenanfragen die Sache beschleunigen, da müsste man aber erst wieder ein wenig mehr bauen.

Das Wörterbuch existiert mitlerweile, ich habe mir auch die Informationen zu YaCy's XML-API angesehen und denke, das wird tatsächlich sehr hilfreich sein, sowohl eine API für Massenanfragen als auch für einzelne. Wie wird das umgesetzt?

Orbiter hat geschrieben:
thilo hat geschrieben:das ganze würde ich am liebsten komplett innerhalb einer hoch- oder scriptsprache abhandeln, in der ich das ergebnis der abfragen dann in irgendeiner datenstruktur (array oder hash) halten kann.

na klar, mit Java! dazu müsstest du dir angucken wie das Servlet zu oben genannten Link die Daten abfragt, und das in einem eigenen Programm integrieren. Ansonsten halt über ein API, dann kannst du das auch in php oder wie du denkst machen.

Ich habe mir das Servlet zu "IndexControlURLs_p" angesehen, und wie es scheint, ist alle Funktionalität, die ich brauche, in dem Objekt vom Typ "plasmaSwitchboard" vorhanden. Wenn ich nun ein neues Java-Programm "auf der grünen Wiese" schreibe (das als nicht in Yacy integriert ist, das auch kein Servlet ist), wie komme ich an ein solches Objekt heran, um auf den Index meiner Yacy-Installation zuzugreife? Das Servlet bekommt das vollständig initialisierte Objekt ja schon übergeben, ich müsste es ja quasi neu erstellen und ihm nur den Pfad zur YaCy-Installation übergeben?

Orbiter hat geschrieben:
thilo hat geschrieben:noch eine weiterführende frage: komme ich auch informationen über die zusammenhänge zwischen webseiten (verlinkung) heran?

Ja das gibt es:
http://localhost:8080/xml/webstructure.xml
nach dem Aufruf siehst du erst mal nix im Browser, das liegt daran das der nicht weiss wie er das XML darstellen soll. Von der Seite den Source angucken zeigt dir beispielsweise so was hier:
Code: Alles auswählen
<domain host="www.futurebytes.ch" id="-H3NSB" date="20090106">
  <citation host="www.onlinepc.ch" id="M0cdqA" count="4" />
  <citation host="www.coolest-gadgets.com" id="l5ZJua" count="3" />
  <citation host="www.zeitenwende.ch" id="ZAGpvB" count="4" />
  <citation host="www.mister-wong.de" id="M3KP8B" count="28" />
  <citation host="www.golem.de" id="ons91A" count="3" />
  <citation host="yigg.de" id="fW2nGA" count="28" />
</domain>

Das habe ich natürlich gleich getestet, nachdem mein Crawl mitlerweile fertig ist und laut Network.xml 80058 Links und 1118464 Wörter kennt. Mein Output von /api/webstructure.xml sieht aber leider nur so aus:
Code: Alles auswählen
<?xml version="1.0" ?>
<webstructure>
  <domains reference="reverse" count="0" maxref="300" />
</webstructure>

Habe ich beim starten des Crawls irgendeine Einstellung falsch vorgenommen, so dass die Linkstruktur nun nicht angezeigt werden kann? Oder warum ist der Output quasi leer?

Beste Grüße und vielen Dank für die kompetente Hilfe,
thilo
thilo
 
Beiträge: 10
Registriert: Di Jan 06, 2009 1:36 pm


Zurück zu Fragen und Antworten

Wer ist online?

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