Eine Suchmaschine in Perl

Max Maischein

Frankfurt.pm

Uebersicht

Subtitles at http://corion.net/talks/

  • Motivation

  • Struktur einer Suchmaschine

  • Zutaten

  • Demo

  • Ausblick

Wer bin ich?

  • Max Maischein

  • Frankfurt.pm

  • Perl seit 2000

  • Bankenregulatorik seit 2013 (EMIR, EinSiG, MIFiD II, ...)

Zu Viel Information

  • Eigentlich: Zu viel verschiedene Information

  • Zu wenig Zeit, die Informationen zu organisieren

  • Anders als Google

  • Lokale Datenhaltung

Existierende Lösungen

  • Google Search Appliance (Zu teuer)

  • Windows Desktop Search (Nur Windows- und Netzlaufwerke)

  • Sherlock (Mac) (Kein Mac)

  • Linux bzw. Ubuntu (Kenne ich nicht)

Selber machen

  • Sonst wäre es auch kein Vortrag

  • Wenig Zeit

  • Möglichst viel vorhandene Bausteine

Aufteilung

Scraper / Crawler

  • Dokumente finden

  • Text extrahieren

  • Text importieren

  • Textsprache / URL / Zeitpunkt

Index

  • Optimierte Datenstruktur

  • Schnelles Wiederfinden

  • Stemming ("Programme" und "Programmierung" werden gefunden bei Suche nach "Programm")

  • Synonyme

Suche / Suchmaske

  • Sucheingabe

  • Schnelle (!) Antwort

  • Ranking

Aufteilung

  • Crawler / Extraktor (Perl+Apache Tika)

Aufteilung

  • Crawler / Extraktor (Perl+Apache Tika)

  • Index (Elasticsearch, Search::Elasticsearch)

Aufteilung

  • Crawler / Extraktor (Perl+Apache Tika)

  • Index (Elasticsearch, Search::Elasticsearch)

  • Suche (Dancer)

Live Demo

 1:  cpanm --look Dancer::SearchApp
 2:  plackup -Ilib -p 5001 --host 127.0.0.1 -a bin/app.pl &
 3:  
 4:  perl -Ilib -w bin/index-filesystem.pl t\documents
 5:
 6:  # Suche
 7:
 8:  perl -Ilib -w bin/index-url.pl http://corion.net/talks/

ES Schema

  • URL / id ( file:// bzw. mail:// )

  • title

  • body (HTML)

  • author

  • type (file oder mail)

Crawlers / Extraktoren

  • Dateisystem (pdf, Text, Audio, via Apache::Tika)

  • IMAP

Ausblick

  • Extraktion aus Online-Content (Intranet, HTML::ContentExtractor::FTR)

  • Mehr Extraktoren (video, ...)

  • Metasuche über mehrere Instanzen (Laptop im Heimnetz)

Installation

Apache Tika

https://tika.apache.org/download.html

 1:  http://www.apache.org/dyn/closer.cgi/tika/tika-server-1.12.jar

ElasticSearch

https://www.elastic.co/downloads/elasticsearch

 1:  https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.2.0/elasticsearch-2.2.0.zip

Danke

Fragen?

Danke

Fragen?

Dancer::SearchApp

corion@cpan.org

Credits

 1:  Hitman Kevin MacLeod (incompetech.com)
 2:  Licensed under Creative Commons: By Attribution 3.0 License
 3:  http://creativecommons.org/licenses/by/3.0/

Google Search Appliance image by Google Inc.

Bonus section

Crawlers

  • Das Herz der Suchmaschine

  • Inhaltsextraktion

  • Schon viel existierender Code

Entwicklung

IMAP

Nicht so gut vorzuzeigen

Trip zurück in 2001

Also Dateiimport zuerst

index-imap.pl

IMAP Crawler

  • Konverter IMAP-zu-Blog

  • Kann IMAP lesen

  • IMAP Crawler fertig

Dateisystem Crawler

  • File::Find

  • Apache::Tika zum extrahieren

  • Spezialbehandlung für mp3 und Bilder

  • Fertig

Content / Testdaten

  • Eigene Mails

  • Trip zurück ins Jahr 2000

  • Nicht gut zur Vorführung

  • EU/ESMA produziert viele PDFs

  • Ich produziere viele Perl Programme

Vergleich mit Google

  • Pagerank

  • ES rank

  • Metasuche

Ergebnisse

  • PDF

  • Mail

  • Musik