Suchmaschine

Aus Amateurfunk Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Um im HAMNET eine Suchfunktion funktional hinzuzufügen wird die Software YaCy eingesetzt.

YACY ist eine Peer-to-Peer Suchmaschine. Das bedeutet vereinfacht, dass es dezentral administrierte Suchmaschinen gibt, die ihre (lokalen) Suchergebnisse gegenseitig verfügbar machen.

Für das Hamnet wäre also (mindestens) ein Yacy-Server je AS wünschenswert. Optimal ist hier ein sogenannter "Principal Peer". Dabei handelt es sich um einen Yacy-Peer, der Informationen zur erreichbarkeit anderer Yacy-Peers auf einem Webserver ablegt. (Sog. Seed-Liste.) Anhand dieser Listen können andere Yacy-Server in das Netz finden.

Installation

Die Installation kann am einfachsten per Download von YaCy erfolgen. (Ein Raspberry Pi ist jedoch als Rechnerhardware nicht ausreichend)

Für Debian-Systeme steht auch ein .deb Paket bereit. Siehe hierzu [1]

Im HAMNET kann man auch den Mirror von DB0GW nutzen. Dazu trägt man die Quelle:

  deb http://ftp.db0gw.ampr.org/yacy/ ./

in die Sources.list des APT Systems ein.

Die Installation ist unproblematisch, einfach:

  apt-get install openjdk-7-jre-headless # die headless Java Version reicht aus
  apt-get install yacy

Im Installationsdialog muss man dann bei der Frage nach dem Arbeitsprofil nicht "Freeworld" anwählen sondern "URL"

Dort dann z.B. eingeben:

  http://search.db0uhi.as64636.de.ampr.org/www/hamnet.yacy

Einbinden eines Peer in das gemeinsame Netz

Ziel ist es also, erstmal in jedem AS des HAMNET an einem Standort, an dem es eh schon IT gibt (zB einen Webserver) einen YaCy Peer einzurichten und mit der Einheit "hamnet.yacy" zu verbinden. (Das sollte derzeit aus allen AS funktionieren).

Dazu wird beim eigenen Peer unter http://localhost:8090/ConfigNetwork_p.html die Netzwerk-Definition geändert. Bitte hier eine der folgende Adresse eintragen:

http://search.db0uhi.as64636.de.ampr.org/www/hamnet.yacy

http://dk0mav.as64643.de.ampr.org/yacy/hamnet.yacy
http://db0hmk.as64636.de.ampr.org/hamnet.yacy

Nach einem Neustart des YaCy-Serverdienstes sollte sich euer Peer mit dem Netzwerk "Hamnet" verbinden.

Netzwerk-Definitionen

Damit sich die YaCy-Server im Hamnet gegenseitig finden muss eine einheitliche Definition für das Suchmaschinen-Netzwerk existieren. Diese Netzwerkdefinition ist die oben genannte Textdatei "hamnet.yacy". Sofern ihr für eure (Hamnet-)Umgebung eine eigene Netzwerkdefinitionsdatei ("hamnet.yacy") anlegen möchtet, stelle ich hier die aktuell genutzte Datei ein.

network.unit.name = HAMNET
network.unit.description = HAMNET YaCy Community

network.unit.domain = global
network.unit.dht = true
network.unit.dhtredundancy.junior = 1
network.unit.dhtredundancy.senior = 1


# the vertical partition of the dht: this applies a division
# of the dht into 2^^<partitionExponent> fragments which get
# all the same word-partition targets but a document-dht computed
# fragment of all documents
network.unit.dht.partitionExponent = 0

# maximum search time for remote queries (milliseconds)
network.unit.remotesearch.maxtime = 10000

# maximum number of results per remote query
network.unit.remotesearch.maxcount = 50

# multi-word burst: percentage of the number of all peers that
# shall be accessed for multi-word searches. Multi-word search is
# a hard problem when the distributed search network is divided by
# term (as done with yacy, partly..).
# Scientific solutions for this problem is to apply heuristics.
# This heuristic enables to switch on a full network scan to get also
# non-distributed multi-word positions. For a full scan set this value to 100.
# Attention: this may out-number the maxcount of available httpc network connections.
network.unit.dht.burst.multiword = 30

network.unit.bootstrap.seedlist1 = http://search.db0uhi.as64636.de.ampr.org/www/seed.txt
network.unit.bootstrap.seedlist2 = http://dk0mav.as64643.de.ampr.org/yacy/seed.txt
network.unit.bootstrap.seedlist3 = http://db0bi.as64635.de.ampr.org:8090/www/seed.txt
network.unit.bootstrap.seedlist4 = http://db0hmk.ampr.org/seed.txt
network.unit.bootstrap.seedlist5 = http://44.225.93.8:8090/www/seed.txt
network.unit.bootstrap.seedlist6 = http://search.db0sda.ampr.org/yacy/seedlist.html
network.unit.bootstrap.seedlist7 = http://44.142.162.18/yacy/seed.txt
network.unit.bootstrap.seedlist8 = http://44.225.164.3:8090/yacy/seedlist.html

# properties for in-protocol response authentication:
network.unit.protocol.control = uncontrolled


# greedy learning: fast information acquisition heuristic for new peers 
greedylearning.enabled = true
greedylearning.limit.doccount = 1000

Seed-Listen

Für den Aufbau des Netzes sind sogenannte Seedlisten erforderlich. Dabei handelt es sich um Textdateien, in denen die Präsenz und Erreichbarkeit anderer YaCy-Server kommuniziert wird. Dies ist vor allem bei ersten Startvorgang eines neuen YaCy-Peers wichtig. Die Stabilität des YaCy-Netzwerkes hängt also unmittelbar von aktuellen Seed-Listen ab. Ich bitte euch daher, eure YaCy-Server möglichst als "Principal-Server" zu konfigurieren; d.h. dass euer Server selbst eine Seed-Liste ablegt und über einen (vermutlich bereits vorhandenen) Web-Server verfügbar macht. Ich schlage vor, erreichbare Seedlisten und die aktuelle Netzwerk-Definition in diesem Wiki-Artikel zu pflegen; so steht sie interessierten immer aktuell zur Verfügung.

Aktuell bekannte Seed-Listen:

http://search.db0uhi.as64636.de.ampr.org/www/seed.txt
http://web.do4bz.as64636.de.ampr.org/seed.txt
http://dk0mav.as64643.de.ampr.org/yacy/seed.txt
http://db0bi.as64635.de.ampr.org:8090/www/seed.txt
http://db0hmk.ampr.org/seed.txt
http://44.225.93.8:8090/www/seed.txt
http://search.db0sda.ampr.org/yacy/seedlist.html
http://44.142.162.18/yacy/seed.txt
http://44.225.164.3:8090/yacy/seedlist.html
http://db0alg.ampr.org/yacy/seed.txt

Probleme

Netzbedingt

Die Dynamik des Hamnets und die Experimentierfreudigkeit der Nutzer und Admins verursachen eine starke Fluktuation. Seit dem Wegfall von DB0FHW (hier ist das Suchmaschinenprojekt begonnen worden) ist das YaCy-Netz im Hamnet immer wieder mal zusammengebrochen. Einige Admins bieten daher den Dienst "Suchmaschine" nicht mehr an.

Fallen Linkstrecken länger aus, so "verwaisen" die YaCy-Server. Nicht erreichbare Peers werden aus der aktiven Liste aussortiert und nicht mehr angesprochen, bis diese sich selbst wieder melden. (gegenseitiger Deadlock) Bei der momentan geringen Anzahl an Peers tritt dieser Fall recht häufig ein. Workaround, fall sich die Peers nicht mehr verbinden: Die Einträge aus "<yacy-ordner>/DATA/INDEX/HAMNET/NETWORK/seed.old.heap in seed.new.heap kopieren und neu starten.

Die Sterntopologie des HAMNETs und die daraus folgende "Inselbildung" bei Linkausfällen führt beim Betrieb von Peer-to-Peer Anwendungen zwangsweise zu Problemen. Eine Erhöhung der Teilnehmerdichte kann dem entgegen wirken.

Weiterhin bieten sich regelmäßige Neustarts des Serverdienstes an. Bei den Starts werden die Netzwerkdefinitionen ("hamnet.yacy") entsprechend neu gelesen und das Netz neu aufgebaut.

Systembedingt

Schnell fällt auf, dass der Nachrichtenaustausch per DHT nicht (offensichtlich) stattfindet. Dies ist auf die momentan geringe Anzahl der Teilnehmer zurückzuführen. (YaCy tauscht erst ab 32 Teilnhemnern Daten per DHT-Verfahren aus.) Dies ist für das HAMNET nicht hinderlich. Bei einer Suchanfrage werden alle erreichbaren Teilnehmer abgefragt. Bis zu einer Teilnehmerzahl von 32 entsteht somit lediglich keine Redundanz der Daten.

Do's and Dont's

Um den Traffic im HAMNET gering zu halten sollten zunächst nur Webserver in der eigenen Umgebung indiziert werden. Automatisches "Crawlen" von HAMWEB-Servern und PR-Mailboxen mit Webfrontend kann hohe Datenmengen verursachen. Unter "Experten Crawl Start" können weitere Parameter eingestellt werden.

Bitte beachtet folgende Parameter:

  • Crawl-Tiefe: Anzahl der Link-Tiefe, der gefolgt wird: Bitte nicht höher als 3
  • Crawler-Filter: Beschränkt den Lade-Filter auf das HAMNET (IP 44.*). Die Indexierung von Seiten, die aus dem HAMNET heraus nicht erreichbar sind, ist nicht sinnvoll. Als IP-Filter kann der folgende reguläre Ausdruck verwendet werden:
^44\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$
Persönliche Werkzeuge