SlideShare ist ein Scribd-Unternehmen logo
Apache Lucene / Solr
       Volltextsuche mit Open Source Tools
       Thomas Koch
       FrOSCon St.Augustin
       26. August 2012




Sonntag, 26. August 12                       1
über mich
                     •   Thomas Koch
                         •   Generation 40+
                     •   Software-Entwickler
                         •   Python, JavaScript, Java ...
                         •   Python User Group PyCologne
                     •   OrbiTeam Software
                         •   Bonn
                         •   BSCW
                             Collaboration Server
                             (Python powered ,-)



Sonntag, 26. August 12                                      2
Agenda

                         • Überblick Lucene / Solr - was ist das?
                         • Grundlegende Konzepte IR
                         • PyLucene: Details und Beispiele
                         • Solr: Details und Beispiele
                         • Weitere Informationsquellen
Sonntag, 26. August 12                                              3
Apache Lucene
                     • Lucene Core
                      • Java-basiertes Framework für Indexing
                           und Suche
                         • bietet API zur Entwicklung von
                           Suchkomponenten
                         • basiert auf invertiertemdesselben...)
                           (und effizienter Verwaltung
                                                      Index



Sonntag, 26. August 12                                             4
Apache Solr

                     • Solr ist ein Such-Server auf Basis von
                       Lucene Core (in Java)
                     • Out-of-the-Box: enthält alle notwendigen
                       Komponenten und Beispiel-Konfiguration
                     • Easy-to-use: HTML Admin GUI und
                       vordefiniertes Such GUI
                         (für GUI Prototypen - sog. Solaritas)




Sonntag, 26. August 12                                            5
Gemeinsamkeiten
                     • Lucene & Solr sind...
                      • Open Source (Apache 2.0 Lizenz)
                      • in Java entwickelt
                      • gut dokumentiert
                      • flexibel erweiterbar
                      • stabil und leistungsfähig
Sonntag, 26. August 12                                    6
Unterschiede
                     •   Lucene ist ein Framework zur Entwicklung von
                         Suchmaschinen
                     •   Solr ist eine Server-Software, die Indizierung und Suche
                         als Service bereitstellt
                     •   Programmieraufgaben in Lucene sind
                         Konfigurationsaufgaben in Solr
                     •   Programmierung mit Lucene erfolgt in Java
                         (mittels PyLucene auch in Python)
                     •   Schnittstellen zu Solr sind sprachunabhängig
                         (Rest-like API, Standard-Formate wie XML und JSON)



Sonntag, 26. August 12                                                              7
Theorie

             GRUNDLEGENDE KONZEPTE



Sonntag, 26. August 12               8
Grundlagen
                     •   Suchraumaufbereitung
                         •   Erfassen der Objekte und Informationsextraktion
                             •   z.B. Extraktion der Daten (Web-Crawler, DB-Export)
                             •   ggf. Konvertierung (z.B. unterschiedliche Dokument-Formate nach Text)
                     •   Indexierung
                         •   Textaufbereitung und -erfassung im Suchindex - nach Suchraumaufbereitung
                             •   beinhaltet u.a. Textanalyse (folgt)
                         •   Bedeutet i.W. Aktualisierung und Optimierung der Index-Strukturen
                         •   Index: Daten/Dateistrukturen für effiziente Suche
                              (und Index-Aktualisierung)
                         •   Wesentliche Unterschiede zu klassischen relationalen Datenbanken:
                             kein Schema, keine Joins




Sonntag, 26. August 12                                                                                   9
Grundlagen
                     •   Textanalyse
                         •   Vorverarbeitung der Ausgangsdaten (Texte) in ,Wörter‘ (Terme)
                         •   mittels Stemmer, Tokenizer, Filter etc.
                             z.B. durch...
                         •   Normalisierung (whitespace removal, lowercase etc.)
                         •   Entfernung von Stop-Wörtern (he, she, it … // der, die, das…)
                         •   Hinzufügen von Synonymen (SynonymFilter)
                         •   Reduzierung auf Stammform - Stemming
                             (z.B. Häuser => Haus)
                         •   ist i.d.R. Sprachabhängig!



Sonntag, 26. August 12                                                                       10
Grundlagen
                     •   Suche

                         •   mittels einer Abfragesprache
                             (Query Language)
                         •   Verknüpfung von Suchausdrücken per boolscher Logik (AND, OR etc.)
                         •   basiert auf Matching-Algorithmen
                         •   liefert Treffer (Hits) und Ranking (Scores)
                     •   Trefferanzeige
                         •   letzter Schritt:Visualisierung der Suchergebnisse
                             (Anwendungsabhängig)

                         •   kann interaktive Verfeinerung der Suche unterstützen
                             (z.B. Facetted Search, Filter)




Sonntag, 26. August 12                                                                           11
Theorie & Praxis
                     •   Suchraumaufbereitung
                         •   Ist i.d.R. Anwendungssache (und domain-spezifisch)
                         •   Konvertierung: Apache Tika!

                     •   Textanalyse
                         •   StandardAnalyzer, SnowballFilter, PorterStemFilter, GermanAnalyzer

                     •   Indexierung
                         •   IndexWriter, Document, Field

                     •   Suche
                         •   IndexSearcher, QueryParser, Term
                     •   Trefferanzeige
                         •   Hit, hit.score, Explanation




Sonntag, 26. August 12                                                                            12
Index, Document, Field
                     • Index verwaltet Dokumente (,Document‘)
                         (abstraktes Objekt)
                     • pro Dokument: verschiedene Attribute
                      • Metadaten bzw. Felder (,Fields‘)
                      • grob: key-value pair
                     • Inhalte werden im (invertierten)
                         Index verwaltet


Sonntag, 26. August 12                                          13
Index-Struktur
                                 (on-disc)
                     • Grundlage einer index-basierten
                         Suchmaschine: invertierter Index




Sonntag, 26. August 12                                      14
Index-Struktur
                         (in memory / Objekt-Modell)
            • Inhalte, die durchsucht werden
              sollen, müssen in Dokumente &    Index
              Felder (Documents & Fields)
              transformiert werden                     Dokument
              => Denormalisierung                         Feld
            • Beispiele für Dokumente:             Term    …     Term

               – E-mail, PDF-Dokument,
                                                          ….
                 Wikipedia-Artikel etc.                   Feld
            • Beispiele für Felder (Field):        Term    …     Term

               – Autor, Content,
                 Änderungsdatum,
                 Titel, Abstract,
                                                       Dokument
                 Keywords etc.                            ….



Sonntag, 26. August 12                                                  15
PyLucene



Sonntag, 26. August 12              16
Apache PyLucene
                     •   Lucene Core
                         •   Java-basiertes Framework für Indexing und Suche
                         •   cross platform: 100%-pure Java
                     •   PyLucene
                         •   Python Portierung von Lucene Core (über JCC)
                         •   API-kompatibel und Index-kompatibel
                         •   JCC-Projekt: C++ code-Generator
                             •   Anbindung von Java-Klassen/Packages an Python (über JNI)
                             •   Python Module aus PyLucene sind durch JCC generiert
                                 (direkt aus den Lucene Core Java-Sourcen)
                             •   Generierter Code integriert eine Java VM in den Python-Prozess




Sonntag, 26. August 12                                                                            17
(Py)Lucene Features
                     • Wildcard Search („Pyth*“)
                     • Fuzzy Search (unscharfe Suche)
                     • Phrase Query („deutsche Einheit“)
                     • Related Search (‚More like this‘)
                     • Spell Checker (‚Did you mean …‘)
                     • Hit highlighting (Trefferhervorhebung)
Sonntag, 26. August 12                                          18
Aufbau von PyLucene
        • Anwendung
            (eigener Code)

        • PyLucene
            (Framework)         IndexWriter           IndexSearcher




        • Storage
            (File, RAM, DB,…)
                                              Index




Sonntag, 26. August 12                                                19
Lucene Details
                     • Anforderungen
                      • Lucene: Java 1.5+, Ant 1.7+
                      • PyLucene: Java 1.4+, Python 2.3+
                     • Aktuelle Version (08/2012)
                      • Stable: Apache (Py)Lucene 3.6.1
                      • Apache (Py)Lucene 4.0-ALPHA
Sonntag, 26. August 12                                     20
Praxisbeispiele

             PYLUCENE DEMO



Sonntag, 26. August 12         21
PyLucene:
                Erste Schritte
                     • Getting Started: Download, Build & Run
                      • Download tar.gz, extract, build ...
                        • JCC => <Lib>/site-packages/
                           JCC-2.14-py2.7-<platform>.egg
                         • Lucene => <Lib>/site-packages/
                           lucene-3.6.1-py2.7-<platform>.egg


Sonntag, 26. August 12                                          22
PyLucene:
                Erste Hürden
                     •   Build erfordert: java, gcc, ant, python, setuptools
                         •   PyLucene enthält Java Lucene Core
                         •   Unix/MacOS: Anpassung Makefile
                         •   Windows: MinGW/Cygwin oder MS-VC Compiler
                         •   Runtime erfordert: java & python
                     •   Pre-compiled binaries: PyLucene Extras Projekt
                         http://code.google.com/a/apache-extras.org/p/pylucene-extra/

                         •   Hinweise zu Stolpersteinen im Wiki


Sonntag, 26. August 12                                                                  23
PyLucene
                            im Interpreter
                 Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53)
                 [GCC 4.2.1 (Based on Apple Inc. build 5658)]
                 Type "help", "copyright", "credits" or "license"

                 >>> import lucene
                 >>> lucene.VERSION
                 '3.6.0'
                 >>> x = lucene.initVM()
                 >>> x
                 <jcc.JCCEnv object at 0x106ef8138>
                 >>> x.java_version
                 u'1.6.0_33'
                 >>> lucene.Document
                 <type 'Document'>
                 >>> lucene.IndexWriter
                 <type 'IndexWriter'>

Sonntag, 26. August 12                                              24
Beispiel: Indexierung
                     •   Inhalte hinzufügen:
                         IndexWriter und Document
             store = lucene.SimpleFSDirectory(lucene.File(storeDir))
             analyzer = StandardAnalyzer(Version.LUCENE_CURRENT)
             writer = lucene.IndexWriter(store, analyzer, True, #create
                            lucene.IndexWriter.MaxFieldLength.LIMITED)


                     •   Eigenschaften der Felder: Stored (yes/no), Analyzed (yes/no)
             for file in files:
                    doc = lucene.Document()
                    doc.add(lucene.Field("path", get_path(file),
                                       lucene.Field.Store.YES,
                                       lucene.Field.Index.NOT_ANALYZED))
                     •
                    doc.add(lucene.Field("contents", file.readlines(),
                                       lucene.Field.Store.NO,
                                       lucene.Field.Index.ANALYZED))
                    writer.addDocument(doc) # index document

Sonntag, 26. August 12                                                                  25
Beispiel: Suche
                     • Inhalt suchen: IndexReader und Hits
              directory = SimpleFSDirectory(File(storeDir))
              searcher = IndexSearcher(directory, True) # readOnly
              analyzer = StandardAnalyzer(Version.LUCENE_CURRENT)


                     • Suchanfrage: mittel Queryparser
              query = QueryParser("contents", analyzer).parse(queryStr)
              # perform query on index and get max=50 results
              scoreDocs = searcher.search(query, 50).scoreDocs
              # finally show results
              for scoreDoc in scoreDocs:
                  doc = searcher.doc(scoreDoc.doc)
                  # get Document from index
                  print ‘match:', doc.get("path")


Sonntag, 26. August 12                                                    26
PyLucene Demo
                     •   Ziel: Suchmaschine für Liedtitel
                     •   Datenquelle: http://musicbrainz.org
                     •   Vorgehen:
                         •   Script für Index-Erstellung (aus CSV)
                         •   Script zur Suche über Index
                     •   Laufzeit:
                         •   Index mit ca. 7 Mio. Tracks aus MusicBrainz wird
                             in 7:34s erstellt (ca. 600 MB Index)


Sonntag, 26. August 12                                                          27
Solr



Sonntag, 26. August 12          28
Apache Solr
                     • Solr = Such-Server auf Basis von Lucene Core
                        mit REST-like API.
                       • Solr basiert auf der Lucene Search Library
                          und erweitert diese
                     • Solr arbeitet in Servlet Containern wie Apache
                        Tomcat (oder Jetty)
                     • Indexing: „Dokumente“ zum Index hinzufügen
                       • via XML oder JSON - über HTTP
                     • Suche: query Solr via HTTP GET
                       • Ergebnis als XML oder JSON


Sonntag, 26. August 12                                                  29
Solr: Features
            •         Perfomance
                  •      Optimized for High Volume Web Traffic: highly configurable Caching
                  •      Fast Incremental Updates and Index Replication
                  •      Highly scalable distributed search (sharded index across multiple hosts)
            •  Features
              • Faceted Search und Filter
              • Extraktion von Inhalt und Metadaten (via Apache Tika)
              • Alternative Query Parser (dismax, edismax) und Geo-Suche (Distanz)
              • Data Schema (Numeric Types, Dynamic Fields, Unique Keys…)
            • Offen
              • Diverse Client APIs für Java, Unix(shell-script), Python etc.
            • Flexibel
              • hochgradig anpassbar (XML-Konfigurationsdateien)
              • erweiterbar (Lucene/Solr plugins)
Sonntag, 26. August 12                                                                              30
Solr: Architektur
                    • Solr Server
                         •       Basiert auf Servlets (Jetty, Tomcat o.ä.)
                         •       Wird durch Konfigurationsdateien angepasst (XML)
                             •     z.B. schema.xml , solr.xml
                         •       Bietet „REST-like“ API
                             •     z.B. http://localhost:8983/solr/update/csv
                         •       Erlaubt add,update,delete über HTTP-Interface
                             •     z.B. einfacher POST einer XML-Datei
                             •     andere HTTP-Schnittstellen für CSV, PDF etc.
                         •       Kann sich auch Daten „ziehen“ (Pull)
                             •     Über RSS-Feed oder DB-Adapter
                         •       Skaliert durch Replication (Master/Slave)



Sonntag, 26. August 12                                                             31
Lucene/Solr Architecture
  Request Handlers                                 Response Writers              Update Handlers

   /admin                /select     /spell         XML    Binary   JSON             XML    CSV    binary

  Search Components                                                     Update Processors
            Query              Highlighting                                 Signature        Extracting
          Spelling                 Statistics             Schema            Logging
                                                                                              Request
                                                                                              Handler
          Faceting                  Debug                                   Indexing        (PDF/WORD)
     More like this                Clustering                                               Apache Tika
                                                                            Query
                                                                           Parsing
           Distributed Search                             Config                              Data Import
                                                                                            Handler (SQL/
                                                                           Analysis
                                                                                                RSS)
                                                                             High-
         Faceting            Filtering           Search      Caching
                                                                           lighting
                                                                                               Index
                                                                                             Replication
                Core Search                   Apache Lucene              Indexing
               IndexReader/
                                                Text Analysis          IndexWriter
                 Searcher
                                                                                                      32

Sonntag, 26. August 12                                                                                      32
<doc>
                                         Solr Indexing                             PDF
     <title>             HTTP POST
                                                                                HTTP POST



                            /update      /update/csv       /update/xml      /update/extract
                                                           XML Update            Solr CELL:
                           XML Update     CSV Update       with custom           Extracting
                             Handler        Handler         processor        RequestHandler
                                                              chain           (PDF, Word, …)
                                                                             via Apache Tika
                                          Update Processor Chain (per handler)
                                                                                    Text Index
  RSS                                            Signature                          Analyzers
               pull       Data Import            processor
 feed                      Handler
                                             Custom Transform                   Lucene
                         Database pull           processor
                            RSS pull              Logging
               pull
                            Simple               processor
SQL DB
                          transforms
                                                   Index                   Lucene Index
                                                 processor
                                                                       8                    33

Sonntag, 26. August 12                                                                           33
Solr Details
                     • Getting Started
                      • Anforderung: Java 1.5+
                      • Tutorial: http://lucene.apache.org/solr/tutorial.html
                     • Aktuelle Version (08/2012)
                      • Stable: Apache Solr 3.6.1 (ca. 90 MB)
                      • Apache Solr 4.0-ALPHA
Sonntag, 26. August 12                                                          34
Praxisbeispiele

             SOLR DEMO



Sonntag, 26. August 12         35
Getting started
                     •   Download, Configure & Run
                         •   Etliche XML-Konfigurationsdateien in conf
                             •   solrconfig.xml Allgemeine Konfiguration
                                 zu Lucene, Directories, Web
                             •   schema.xml Datenschema für Suchfelder

                     •   Start Server $ java -jar start.jar
                     •   Open Browser: http://localhost:8983/solr/
                         bzw. /solr/browse


Sonntag, 26. August 12                                                   36
Solr: Adding Data
        java -jar post.jar data.xml|.json|.csv
        • ipod_video.xml




Sonntag, 26. August 12                           37
Solr & Python
           • Kein integrierter Python Client
                 • Note: As of version 1.3, Solr no longer comes bundled with a
                   Python client.The existing client was not sufficiently
                   maintained or tested as development of Solr progressed,
                   and committers felt that the code was not up to our usual
                   high standards of release.
           • Verschiedene Bindings für Solr verfügbar
                 • solrpy: a python client for solr
                   http://code.google.com/p/solrpy/
                 • Sunburnt: a python-solr interface
                   https://github.com/tow/sunburnt
                 • Und mehr im Solr-Wiki …
                   http://wiki.apache.org/solr/SolPython

Sonntag, 26. August 12                                                            38
Solr: Demo
            • Import und Suche via Python
             • mittels eines Python clients für Solr
            • Basis: SolrPy
             • a lightweight Python wrapper for Apache Solr
             • allows to add documents to a Solr instance
             • and to perform queries and gather search results
                         from Solr using Python.


Sonntag, 26. August 12                                            39
Solr: Beispiel
                     • Datenquelle: http://musicbrainz.org
                     • Daten: vorkonfigurierte Solr-Instanz
                         (aus Solr Buch) mit Tracks, Artists, Releases
                     • Demo:
                      • Solr Admin GUI
                      • Script zur Suche über Solr
Sonntag, 26. August 12                                                   40
Weitere Infos
                     •   Solr Buch
                         •   www.solrenterprisesearchserver.com
                     •   Lucene Buch
                         •   http://www.manning.com/hatcher2/
                     •   Lucene / PyLucene
                         •   http://lucene.apache.org /pylucene
                     •   PySolr
                         •   https://github.com/toastdriven/pysolr
                     •   Lucene Revolution (Konferenz)
                         •   http://www.lucenerevolution.org



Sonntag, 26. August 12                                               41
Copyrights
                     •   Apache Lucene, Apache Solr, Apache PyLucene and their respective logos are
                         trademarks of The Apache Software Foundation.
                     •   All other marks mentioned may be trademarks or registered trademarks of their
                         respective owners.
                     •   Bildquellen:
                         •   Logos: python.org, lucene.apache.org, pycologne.de
                         •   Bücher: packtlib, Manning
                         •   Eier: http://www.lsg.musin.de/portal/Datei:Eier.jpg
                         •   Theoriecartoon: http://kunststoffreport.de
                         •   Google Search Results
                             https://developers.google.com/custom-search/images/start_google_wheels_result.png
                         •   Foto Robert Harding (Hürden): dpa / RP online
                         •   Lucene/Solr Architecture, Inverted Index:
                             http://people.apache.org/~yonik/presentations




Sonntag, 26. August 12                                                                                           42
Fragen


                •
                • Source Code (der Beispiele)
                                                       ?
                   • http://code.google.com/p/lucenesolrdemo/source/
                     browse
                • Apache PyLucene Community
                         – mailing list: pylucene-dev@lucene.apache.org
                         – svn: http://svn.apache.org/repos/asf/lucene/pylucene/




Sonntag, 26. August 12                                                             43
Kontakt / Fragen
                     • Thomas Koch
                      • Twitter: @tomy_koch
                      • eMail: thomas.koch@pycologne.de
                     • PyCologne:
                      • http://www.pycologne.de
                      • Treffen: jeden 2.Mittwoch in Köln
Sonntag, 26. August 12                                      44

Weitere ähnliche Inhalte

Ähnlich wie Volltextsuche mit Lucene und Solr

Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
KurtStockinger
 
What’s new in Apache Solr 4.7 und Elasticsearch 1.1
What’s new in Apache Solr 4.7 und Elasticsearch 1.1What’s new in Apache Solr 4.7 und Elasticsearch 1.1
What’s new in Apache Solr 4.7 und Elasticsearch 1.1
SHI Search | Analytics | Big Data
 
DSpace as publication platform
DSpace as publication platformDSpace as publication platform
DSpace as publication platformredsys
 
SCAPE Skalierbare Langzeitarchivierung
SCAPE Skalierbare LangzeitarchivierungSCAPE Skalierbare Langzeitarchivierung
SCAPE Skalierbare Langzeitarchivierung
Sven Schlarb
 
Einbindung von Linked Data in existierende Bibliotheksanswendungen
Einbindung von Linked Data in existierende BibliotheksanswendungenEinbindung von Linked Data in existierende Bibliotheksanswendungen
Einbindung von Linked Data in existierende Bibliotheksanswendungenredsys
 
Setting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
Setting-up Elasticsearch, Logstash, Kibana für agile DatenanalyseSetting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
Setting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
SHI Search | Analytics | Big Data
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle Datenbank
Ulrike Schwinn
 
Elasticsearch Cluster Management mit Marvel
Elasticsearch Cluster Management mit MarvelElasticsearch Cluster Management mit Marvel
Elasticsearch Cluster Management mit Marvel
SHI Search | Analytics | Big Data
 
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE Project
 
DSpace 5 und Linked (Open) Data
DSpace 5 und Linked (Open) DataDSpace 5 und Linked (Open) Data
DSpace 5 und Linked (Open) Data
Pascal-Nicolas Becker
 
Repositorieninhalte als Linked Data bereitstellen
Repositorieninhalte als Linked Data bereitstellenRepositorieninhalte als Linked Data bereitstellen
Repositorieninhalte als Linked Data bereitstellen
Pascal-Nicolas Becker
 
Repositorieninhalte als LinkedData bereitstellen
Repositorieninhalte als LinkedData bereitstellenRepositorieninhalte als LinkedData bereitstellen
Repositorieninhalte als LinkedData bereitstellen
Universitätsbibliothek der Technischen Universität Berlin
 
Nah am Nutzer (Steinberg) - Konzept und Umsetzung eines Discovery-Services mi...
Nah am Nutzer (Steinberg) - Konzept und Umsetzung eines Discovery-Services mi...Nah am Nutzer (Steinberg) - Konzept und Umsetzung eines Discovery-Services mi...
Nah am Nutzer (Steinberg) - Konzept und Umsetzung eines Discovery-Services mi...
GESIS - Leibniz-Institut für Sozialwissenschaften
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
Karin Patenge
 
Herausforderungen und Lösungen bei der Publikation und Nutzung von Normdaten ...
Herausforderungen und Lösungen bei der Publikation und Nutzung von Normdaten ...Herausforderungen und Lösungen bei der Publikation und Nutzung von Normdaten ...
Herausforderungen und Lösungen bei der Publikation und Nutzung von Normdaten ...
Jakob .
 
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für PanoramaOracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Peter Ramm
 
OpenAIRE guidelines for data and literature repositories webinar_28022017
OpenAIRE guidelines for data and literature repositories webinar_28022017OpenAIRE guidelines for data and literature repositories webinar_28022017
OpenAIRE guidelines for data and literature repositories webinar_28022017
Jessica Rex
 
Repository Usage Statistics and the Open Research Analytics Service
Repository Usage Statistics and the Open Research Analytics ServiceRepository Usage Statistics and the Open Research Analytics Service
Repository Usage Statistics and the Open Research Analytics Service
OpenAIRE
 
Azure WorkshopPart1 Intro
Azure WorkshopPart1   IntroAzure WorkshopPart1   Intro
Azure WorkshopPart1 Intro
Oliver Michalski
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen Einsatz
Thomas Koch
 

Ähnlich wie Volltextsuche mit Lucene und Solr (20)

Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
 
What’s new in Apache Solr 4.7 und Elasticsearch 1.1
What’s new in Apache Solr 4.7 und Elasticsearch 1.1What’s new in Apache Solr 4.7 und Elasticsearch 1.1
What’s new in Apache Solr 4.7 und Elasticsearch 1.1
 
DSpace as publication platform
DSpace as publication platformDSpace as publication platform
DSpace as publication platform
 
SCAPE Skalierbare Langzeitarchivierung
SCAPE Skalierbare LangzeitarchivierungSCAPE Skalierbare Langzeitarchivierung
SCAPE Skalierbare Langzeitarchivierung
 
Einbindung von Linked Data in existierende Bibliotheksanswendungen
Einbindung von Linked Data in existierende BibliotheksanswendungenEinbindung von Linked Data in existierende Bibliotheksanswendungen
Einbindung von Linked Data in existierende Bibliotheksanswendungen
 
Setting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
Setting-up Elasticsearch, Logstash, Kibana für agile DatenanalyseSetting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
Setting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle Datenbank
 
Elasticsearch Cluster Management mit Marvel
Elasticsearch Cluster Management mit MarvelElasticsearch Cluster Management mit Marvel
Elasticsearch Cluster Management mit Marvel
 
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
SCAPE - Skalierbare Langzeitarchivierung (SCAPE - scalable longterm digital p...
 
DSpace 5 und Linked (Open) Data
DSpace 5 und Linked (Open) DataDSpace 5 und Linked (Open) Data
DSpace 5 und Linked (Open) Data
 
Repositorieninhalte als Linked Data bereitstellen
Repositorieninhalte als Linked Data bereitstellenRepositorieninhalte als Linked Data bereitstellen
Repositorieninhalte als Linked Data bereitstellen
 
Repositorieninhalte als LinkedData bereitstellen
Repositorieninhalte als LinkedData bereitstellenRepositorieninhalte als LinkedData bereitstellen
Repositorieninhalte als LinkedData bereitstellen
 
Nah am Nutzer (Steinberg) - Konzept und Umsetzung eines Discovery-Services mi...
Nah am Nutzer (Steinberg) - Konzept und Umsetzung eines Discovery-Services mi...Nah am Nutzer (Steinberg) - Konzept und Umsetzung eines Discovery-Services mi...
Nah am Nutzer (Steinberg) - Konzept und Umsetzung eines Discovery-Services mi...
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
 
Herausforderungen und Lösungen bei der Publikation und Nutzung von Normdaten ...
Herausforderungen und Lösungen bei der Publikation und Nutzung von Normdaten ...Herausforderungen und Lösungen bei der Publikation und Nutzung von Normdaten ...
Herausforderungen und Lösungen bei der Publikation und Nutzung von Normdaten ...
 
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für PanoramaOracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
Oracle-DB: Panorama-Sampler - Eigenes Workload Repository für Panorama
 
OpenAIRE guidelines for data and literature repositories webinar_28022017
OpenAIRE guidelines for data and literature repositories webinar_28022017OpenAIRE guidelines for data and literature repositories webinar_28022017
OpenAIRE guidelines for data and literature repositories webinar_28022017
 
Repository Usage Statistics and the Open Research Analytics Service
Repository Usage Statistics and the Open Research Analytics ServiceRepository Usage Statistics and the Open Research Analytics Service
Repository Usage Statistics and the Open Research Analytics Service
 
Azure WorkshopPart1 Intro
Azure WorkshopPart1   IntroAzure WorkshopPart1   Intro
Azure WorkshopPart1 Intro
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen Einsatz
 

Mehr von Thomas Koch

Einfache Heimautomatisierung auf dem Raspberry Pi mit Python
Einfache Heimautomatisierung auf dem Raspberry Pi mit PythonEinfache Heimautomatisierung auf dem Raspberry Pi mit Python
Einfache Heimautomatisierung auf dem Raspberry Pi mit Python
Thomas Koch
 
CI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python CodeCI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python Code
Thomas Koch
 
CI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und PythonCI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und Python
Thomas Koch
 
BSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtBSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemacht
Thomas Koch
 
Raspberry Pi und Python
Raspberry Pi und PythonRaspberry Pi und Python
Raspberry Pi und Python
Thomas Koch
 
Einführung in Raspberry Pi und GPIO
Einführung in Raspberry Pi und GPIOEinführung in Raspberry Pi und GPIO
Einführung in Raspberry Pi und GPIO
Thomas Koch
 
Python-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipsePython-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und Eclipse
Thomas Koch
 
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemEnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
Thomas Koch
 
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Thomas Koch
 
PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011
Thomas Koch
 
Getting Started with Dojo Toolkit
Getting Started with Dojo ToolkitGetting Started with Dojo Toolkit
Getting Started with Dojo Toolkit
Thomas Koch
 
Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008) Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008)
Thomas Koch
 
Suche und PyLucene
Suche und PyLuceneSuche und PyLucene
Suche und PyLucene
Thomas Koch
 

Mehr von Thomas Koch (13)

Einfache Heimautomatisierung auf dem Raspberry Pi mit Python
Einfache Heimautomatisierung auf dem Raspberry Pi mit PythonEinfache Heimautomatisierung auf dem Raspberry Pi mit Python
Einfache Heimautomatisierung auf dem Raspberry Pi mit Python
 
CI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python CodeCI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python Code
 
CI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und PythonCI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und Python
 
BSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtBSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemacht
 
Raspberry Pi und Python
Raspberry Pi und PythonRaspberry Pi und Python
Raspberry Pi und Python
 
Einführung in Raspberry Pi und GPIO
Einführung in Raspberry Pi und GPIOEinführung in Raspberry Pi und GPIO
Einführung in Raspberry Pi und GPIO
 
Python-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipsePython-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und Eclipse
 
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemEnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
 
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
 
PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011
 
Getting Started with Dojo Toolkit
Getting Started with Dojo ToolkitGetting Started with Dojo Toolkit
Getting Started with Dojo Toolkit
 
Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008) Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008)
 
Suche und PyLucene
Suche und PyLuceneSuche und PyLucene
Suche und PyLucene
 

Volltextsuche mit Lucene und Solr

  • 1. Apache Lucene / Solr Volltextsuche mit Open Source Tools Thomas Koch FrOSCon St.Augustin 26. August 2012 Sonntag, 26. August 12 1
  • 2. über mich • Thomas Koch • Generation 40+ • Software-Entwickler • Python, JavaScript, Java ... • Python User Group PyCologne • OrbiTeam Software • Bonn • BSCW Collaboration Server (Python powered ,-) Sonntag, 26. August 12 2
  • 3. Agenda • Überblick Lucene / Solr - was ist das? • Grundlegende Konzepte IR • PyLucene: Details und Beispiele • Solr: Details und Beispiele • Weitere Informationsquellen Sonntag, 26. August 12 3
  • 4. Apache Lucene • Lucene Core • Java-basiertes Framework für Indexing und Suche • bietet API zur Entwicklung von Suchkomponenten • basiert auf invertiertemdesselben...) (und effizienter Verwaltung Index Sonntag, 26. August 12 4
  • 5. Apache Solr • Solr ist ein Such-Server auf Basis von Lucene Core (in Java) • Out-of-the-Box: enthält alle notwendigen Komponenten und Beispiel-Konfiguration • Easy-to-use: HTML Admin GUI und vordefiniertes Such GUI (für GUI Prototypen - sog. Solaritas) Sonntag, 26. August 12 5
  • 6. Gemeinsamkeiten • Lucene & Solr sind... • Open Source (Apache 2.0 Lizenz) • in Java entwickelt • gut dokumentiert • flexibel erweiterbar • stabil und leistungsfähig Sonntag, 26. August 12 6
  • 7. Unterschiede • Lucene ist ein Framework zur Entwicklung von Suchmaschinen • Solr ist eine Server-Software, die Indizierung und Suche als Service bereitstellt • Programmieraufgaben in Lucene sind Konfigurationsaufgaben in Solr • Programmierung mit Lucene erfolgt in Java (mittels PyLucene auch in Python) • Schnittstellen zu Solr sind sprachunabhängig (Rest-like API, Standard-Formate wie XML und JSON) Sonntag, 26. August 12 7
  • 8. Theorie GRUNDLEGENDE KONZEPTE Sonntag, 26. August 12 8
  • 9. Grundlagen • Suchraumaufbereitung • Erfassen der Objekte und Informationsextraktion • z.B. Extraktion der Daten (Web-Crawler, DB-Export) • ggf. Konvertierung (z.B. unterschiedliche Dokument-Formate nach Text) • Indexierung • Textaufbereitung und -erfassung im Suchindex - nach Suchraumaufbereitung • beinhaltet u.a. Textanalyse (folgt) • Bedeutet i.W. Aktualisierung und Optimierung der Index-Strukturen • Index: Daten/Dateistrukturen für effiziente Suche (und Index-Aktualisierung) • Wesentliche Unterschiede zu klassischen relationalen Datenbanken: kein Schema, keine Joins Sonntag, 26. August 12 9
  • 10. Grundlagen • Textanalyse • Vorverarbeitung der Ausgangsdaten (Texte) in ,Wörter‘ (Terme) • mittels Stemmer, Tokenizer, Filter etc. z.B. durch... • Normalisierung (whitespace removal, lowercase etc.) • Entfernung von Stop-Wörtern (he, she, it … // der, die, das…) • Hinzufügen von Synonymen (SynonymFilter) • Reduzierung auf Stammform - Stemming (z.B. Häuser => Haus) • ist i.d.R. Sprachabhängig! Sonntag, 26. August 12 10
  • 11. Grundlagen • Suche • mittels einer Abfragesprache (Query Language) • Verknüpfung von Suchausdrücken per boolscher Logik (AND, OR etc.) • basiert auf Matching-Algorithmen • liefert Treffer (Hits) und Ranking (Scores) • Trefferanzeige • letzter Schritt:Visualisierung der Suchergebnisse (Anwendungsabhängig) • kann interaktive Verfeinerung der Suche unterstützen (z.B. Facetted Search, Filter) Sonntag, 26. August 12 11
  • 12. Theorie & Praxis • Suchraumaufbereitung • Ist i.d.R. Anwendungssache (und domain-spezifisch) • Konvertierung: Apache Tika! • Textanalyse • StandardAnalyzer, SnowballFilter, PorterStemFilter, GermanAnalyzer • Indexierung • IndexWriter, Document, Field • Suche • IndexSearcher, QueryParser, Term • Trefferanzeige • Hit, hit.score, Explanation Sonntag, 26. August 12 12
  • 13. Index, Document, Field • Index verwaltet Dokumente (,Document‘) (abstraktes Objekt) • pro Dokument: verschiedene Attribute • Metadaten bzw. Felder (,Fields‘) • grob: key-value pair • Inhalte werden im (invertierten) Index verwaltet Sonntag, 26. August 12 13
  • 14. Index-Struktur (on-disc) • Grundlage einer index-basierten Suchmaschine: invertierter Index Sonntag, 26. August 12 14
  • 15. Index-Struktur (in memory / Objekt-Modell) • Inhalte, die durchsucht werden sollen, müssen in Dokumente & Index Felder (Documents & Fields) transformiert werden Dokument => Denormalisierung Feld • Beispiele für Dokumente: Term … Term – E-mail, PDF-Dokument, …. Wikipedia-Artikel etc. Feld • Beispiele für Felder (Field): Term … Term – Autor, Content, Änderungsdatum, Titel, Abstract, Dokument Keywords etc. …. Sonntag, 26. August 12 15
  • 17. Apache PyLucene • Lucene Core • Java-basiertes Framework für Indexing und Suche • cross platform: 100%-pure Java • PyLucene • Python Portierung von Lucene Core (über JCC) • API-kompatibel und Index-kompatibel • JCC-Projekt: C++ code-Generator • Anbindung von Java-Klassen/Packages an Python (über JNI) • Python Module aus PyLucene sind durch JCC generiert (direkt aus den Lucene Core Java-Sourcen) • Generierter Code integriert eine Java VM in den Python-Prozess Sonntag, 26. August 12 17
  • 18. (Py)Lucene Features • Wildcard Search („Pyth*“) • Fuzzy Search (unscharfe Suche) • Phrase Query („deutsche Einheit“) • Related Search (‚More like this‘) • Spell Checker (‚Did you mean …‘) • Hit highlighting (Trefferhervorhebung) Sonntag, 26. August 12 18
  • 19. Aufbau von PyLucene • Anwendung (eigener Code) • PyLucene (Framework) IndexWriter IndexSearcher • Storage (File, RAM, DB,…) Index Sonntag, 26. August 12 19
  • 20. Lucene Details • Anforderungen • Lucene: Java 1.5+, Ant 1.7+ • PyLucene: Java 1.4+, Python 2.3+ • Aktuelle Version (08/2012) • Stable: Apache (Py)Lucene 3.6.1 • Apache (Py)Lucene 4.0-ALPHA Sonntag, 26. August 12 20
  • 21. Praxisbeispiele PYLUCENE DEMO Sonntag, 26. August 12 21
  • 22. PyLucene: Erste Schritte • Getting Started: Download, Build & Run • Download tar.gz, extract, build ... • JCC => <Lib>/site-packages/ JCC-2.14-py2.7-<platform>.egg • Lucene => <Lib>/site-packages/ lucene-3.6.1-py2.7-<platform>.egg Sonntag, 26. August 12 22
  • 23. PyLucene: Erste Hürden • Build erfordert: java, gcc, ant, python, setuptools • PyLucene enthält Java Lucene Core • Unix/MacOS: Anpassung Makefile • Windows: MinGW/Cygwin oder MS-VC Compiler • Runtime erfordert: java & python • Pre-compiled binaries: PyLucene Extras Projekt http://code.google.com/a/apache-extras.org/p/pylucene-extra/ • Hinweise zu Stolpersteinen im Wiki Sonntag, 26. August 12 23
  • 24. PyLucene im Interpreter Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) [GCC 4.2.1 (Based on Apple Inc. build 5658)] Type "help", "copyright", "credits" or "license" >>> import lucene >>> lucene.VERSION '3.6.0' >>> x = lucene.initVM() >>> x <jcc.JCCEnv object at 0x106ef8138> >>> x.java_version u'1.6.0_33' >>> lucene.Document <type 'Document'> >>> lucene.IndexWriter <type 'IndexWriter'> Sonntag, 26. August 12 24
  • 25. Beispiel: Indexierung • Inhalte hinzufügen: IndexWriter und Document store = lucene.SimpleFSDirectory(lucene.File(storeDir)) analyzer = StandardAnalyzer(Version.LUCENE_CURRENT) writer = lucene.IndexWriter(store, analyzer, True, #create lucene.IndexWriter.MaxFieldLength.LIMITED) • Eigenschaften der Felder: Stored (yes/no), Analyzed (yes/no) for file in files: doc = lucene.Document() doc.add(lucene.Field("path", get_path(file), lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED)) • doc.add(lucene.Field("contents", file.readlines(), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED)) writer.addDocument(doc) # index document Sonntag, 26. August 12 25
  • 26. Beispiel: Suche • Inhalt suchen: IndexReader und Hits directory = SimpleFSDirectory(File(storeDir)) searcher = IndexSearcher(directory, True) # readOnly analyzer = StandardAnalyzer(Version.LUCENE_CURRENT) • Suchanfrage: mittel Queryparser query = QueryParser("contents", analyzer).parse(queryStr) # perform query on index and get max=50 results scoreDocs = searcher.search(query, 50).scoreDocs # finally show results for scoreDoc in scoreDocs: doc = searcher.doc(scoreDoc.doc) # get Document from index print ‘match:', doc.get("path") Sonntag, 26. August 12 26
  • 27. PyLucene Demo • Ziel: Suchmaschine für Liedtitel • Datenquelle: http://musicbrainz.org • Vorgehen: • Script für Index-Erstellung (aus CSV) • Script zur Suche über Index • Laufzeit: • Index mit ca. 7 Mio. Tracks aus MusicBrainz wird in 7:34s erstellt (ca. 600 MB Index) Sonntag, 26. August 12 27
  • 29. Apache Solr • Solr = Such-Server auf Basis von Lucene Core mit REST-like API. • Solr basiert auf der Lucene Search Library und erweitert diese • Solr arbeitet in Servlet Containern wie Apache Tomcat (oder Jetty) • Indexing: „Dokumente“ zum Index hinzufügen • via XML oder JSON - über HTTP • Suche: query Solr via HTTP GET • Ergebnis als XML oder JSON Sonntag, 26. August 12 29
  • 30. Solr: Features • Perfomance • Optimized for High Volume Web Traffic: highly configurable Caching • Fast Incremental Updates and Index Replication • Highly scalable distributed search (sharded index across multiple hosts) • Features • Faceted Search und Filter • Extraktion von Inhalt und Metadaten (via Apache Tika) • Alternative Query Parser (dismax, edismax) und Geo-Suche (Distanz) • Data Schema (Numeric Types, Dynamic Fields, Unique Keys…) • Offen • Diverse Client APIs für Java, Unix(shell-script), Python etc. • Flexibel • hochgradig anpassbar (XML-Konfigurationsdateien) • erweiterbar (Lucene/Solr plugins) Sonntag, 26. August 12 30
  • 31. Solr: Architektur • Solr Server • Basiert auf Servlets (Jetty, Tomcat o.ä.) • Wird durch Konfigurationsdateien angepasst (XML) • z.B. schema.xml , solr.xml • Bietet „REST-like“ API • z.B. http://localhost:8983/solr/update/csv • Erlaubt add,update,delete über HTTP-Interface • z.B. einfacher POST einer XML-Datei • andere HTTP-Schnittstellen für CSV, PDF etc. • Kann sich auch Daten „ziehen“ (Pull) • Über RSS-Feed oder DB-Adapter • Skaliert durch Replication (Master/Slave) Sonntag, 26. August 12 31
  • 32. Lucene/Solr Architecture Request Handlers Response Writers Update Handlers /admin /select /spell XML Binary JSON XML CSV binary Search Components Update Processors Query Highlighting Signature Extracting Spelling Statistics Schema Logging Request Handler Faceting Debug Indexing (PDF/WORD) More like this Clustering Apache Tika Query Parsing Distributed Search Config Data Import Handler (SQL/ Analysis RSS) High- Faceting Filtering Search Caching lighting Index Replication Core Search Apache Lucene Indexing IndexReader/ Text Analysis IndexWriter Searcher 32 Sonntag, 26. August 12 32
  • 33. <doc> Solr Indexing PDF <title> HTTP POST HTTP POST /update /update/csv /update/xml /update/extract XML Update Solr CELL: XML Update CSV Update with custom Extracting Handler Handler processor RequestHandler chain (PDF, Word, …) via Apache Tika Update Processor Chain (per handler) Text Index RSS Signature Analyzers pull Data Import processor feed Handler Custom Transform Lucene Database pull processor RSS pull Logging pull Simple processor SQL DB transforms Index Lucene Index processor 8 33 Sonntag, 26. August 12 33
  • 34. Solr Details • Getting Started • Anforderung: Java 1.5+ • Tutorial: http://lucene.apache.org/solr/tutorial.html • Aktuelle Version (08/2012) • Stable: Apache Solr 3.6.1 (ca. 90 MB) • Apache Solr 4.0-ALPHA Sonntag, 26. August 12 34
  • 35. Praxisbeispiele SOLR DEMO Sonntag, 26. August 12 35
  • 36. Getting started • Download, Configure & Run • Etliche XML-Konfigurationsdateien in conf • solrconfig.xml Allgemeine Konfiguration zu Lucene, Directories, Web • schema.xml Datenschema für Suchfelder • Start Server $ java -jar start.jar • Open Browser: http://localhost:8983/solr/ bzw. /solr/browse Sonntag, 26. August 12 36
  • 37. Solr: Adding Data java -jar post.jar data.xml|.json|.csv • ipod_video.xml Sonntag, 26. August 12 37
  • 38. Solr & Python • Kein integrierter Python Client • Note: As of version 1.3, Solr no longer comes bundled with a Python client.The existing client was not sufficiently maintained or tested as development of Solr progressed, and committers felt that the code was not up to our usual high standards of release. • Verschiedene Bindings für Solr verfügbar • solrpy: a python client for solr http://code.google.com/p/solrpy/ • Sunburnt: a python-solr interface https://github.com/tow/sunburnt • Und mehr im Solr-Wiki … http://wiki.apache.org/solr/SolPython Sonntag, 26. August 12 38
  • 39. Solr: Demo • Import und Suche via Python • mittels eines Python clients für Solr • Basis: SolrPy • a lightweight Python wrapper for Apache Solr • allows to add documents to a Solr instance • and to perform queries and gather search results from Solr using Python. Sonntag, 26. August 12 39
  • 40. Solr: Beispiel • Datenquelle: http://musicbrainz.org • Daten: vorkonfigurierte Solr-Instanz (aus Solr Buch) mit Tracks, Artists, Releases • Demo: • Solr Admin GUI • Script zur Suche über Solr Sonntag, 26. August 12 40
  • 41. Weitere Infos • Solr Buch • www.solrenterprisesearchserver.com • Lucene Buch • http://www.manning.com/hatcher2/ • Lucene / PyLucene • http://lucene.apache.org /pylucene • PySolr • https://github.com/toastdriven/pysolr • Lucene Revolution (Konferenz) • http://www.lucenerevolution.org Sonntag, 26. August 12 41
  • 42. Copyrights • Apache Lucene, Apache Solr, Apache PyLucene and their respective logos are trademarks of The Apache Software Foundation. • All other marks mentioned may be trademarks or registered trademarks of their respective owners. • Bildquellen: • Logos: python.org, lucene.apache.org, pycologne.de • Bücher: packtlib, Manning • Eier: http://www.lsg.musin.de/portal/Datei:Eier.jpg • Theoriecartoon: http://kunststoffreport.de • Google Search Results https://developers.google.com/custom-search/images/start_google_wheels_result.png • Foto Robert Harding (Hürden): dpa / RP online • Lucene/Solr Architecture, Inverted Index: http://people.apache.org/~yonik/presentations Sonntag, 26. August 12 42
  • 43. Fragen • • Source Code (der Beispiele) ? • http://code.google.com/p/lucenesolrdemo/source/ browse • Apache PyLucene Community – mailing list: pylucene-dev@lucene.apache.org – svn: http://svn.apache.org/repos/asf/lucene/pylucene/ Sonntag, 26. August 12 43
  • 44. Kontakt / Fragen • Thomas Koch • Twitter: @tomy_koch • eMail: thomas.koch@pycologne.de • PyCologne: • http://www.pycologne.de • Treffen: jeden 2.Mittwoch in Köln Sonntag, 26. August 12 44