SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
Facettensuche mit Lucene und Solr
Praktische Umsetzung der Facettensuche
Thomas Koch
@tomy_koch
FrOSCon St.Augustin
25. August 2013
Sonntag, 25. August 13
über mich
• Thomas Koch
• Generation 40+
• Software-Entwickler
• Python, JavaScript, Java ...
• Python User Group PyCologne
• PyCon.DE 2013 (Oktober, Köln)
• OrbiTeam Software (Bonn)
• BSCW (Collaboration Server)
Sonntag, 25. August 13
Agenda
• Facettensuche
• Kurzeinstieg, Motivation, Beispiele
• Grundlegende IR-Konzepte
• Index, Hits, Document, Fields
• Überblick Lucene & Solr
• Features, Gemeinsamkeiten und Unterschiede
• Technische Details und Beispiele
• Facettensuche in Solr
• Facettensuche in Lucene
• Verwandte Projekte und Informationsquellen
Sonntag, 25. August 13
FACETTENSUCHE
Kurzeinführung
4
Sonntag, 25. August 13
Facettensuche:
Einführung
• Facette: Eigenschaft von Objekten (des Suchraums)
• z.B. Preis, Farbe, Hersteller, Kategorie
• erlaubt Einschränkung der Suchergebnisse
• Facettensuche: ausgehend von einer einfachen
Suchanfrage werden die angezeigten Suchergebnisse
durch das Filtern nach bestimmten Kriterien (Facetten)
fortlaufend eingegrenzt
• auch bekannt als:
guided navigation, faceted navigation,
faceted browsing, explorative Suche
Sonntag, 25. August 13
Facettensuche - Motivation
• Ziel: benutzerfreundliche, effiziente
Erschließung von großen Datenmengen
• benutzerfreundlich: Anwender kann
Facetten in beliebiger Reihenfolge
auswählen (und entfernen)
• effizient: Kombination von Facetten wirkt
wie Filter: UND-Verknüpfung
Sonntag, 25. August 13
Beispiel #1
• Online-Shops: Amazon, Ebay, …
–Facetten: Preis, Hersteller, Typ etc.
Sonntag, 25. August 13
Beispiel #2
• Seek
–facetted email browsing
(seek: Erweiterung für Mozilla Thunderbird)
Sonntag, 25. August 13
Aspekte der Facettensuche
an der Benutzerschnittstelle
• Darstellung der Facetten
– oben oder seitlich (links) anordnen
– alle Facetten anzeigen, die im Kontext sinnvoll/
verfügbar sind
– Facette sollte die Anzahl der erwarteten Treffer
(bei Auswahl) anzeigen
• Auswahl anwenden (=Suche verfeinern)
– direkt bei der Auswahl einer Facette
– oder nach Bestätigung durch Anwender
9
Sonntag, 25. August 13
Beispiel #3
10
• Suche nach Forschungsvorhaben
• Einfache
Suchfunktion
• Einschränkung
über Facetten
• Facetten:
• Laufzeit
• Kosten
• Ort:
Bundesland /
Stadt
Sonntag, 25. August 13
GRUNDLEGENDE
KONZEPTE
Theorie
Sonntag, 25. August 13
Bausteine der Suche
•Suchraumaufbereitung
•Textanalyse
•Indexierung
•Suche
•Trefferanzeige
Sonntag, 25. August 13
Bausteine (1/2)
• Suchraumaufbereitung
• Erfassen der Objekte und Informationsextraktion
z.B. Extraktion der Daten (Web-Crawler, DB-Export)
• Textanalyse
• Vorverarbeitung der Ausgangsdaten (Texte)
in ,Wörter‘ (Terme)
• Normalisierung mittels Stemmer,Tokenizer, Filter etc.
• Indexierung
• Textaufbereitung und -erfassung im Suchindex
• Aktualisierung und Optimierung der Index-Strukturen
Sonntag, 25. August 13
Bausteine (2/2)
• Suche
• Erfolgt mittels einer Abfragesprache
(Query Language)
• Verknüpfung von Suchausdrücken per boolscher Logik
• Liefert Treffer (Hits) und deren Ranking (Scores)
• Trefferanzeige
• Letzter Schritt:Visualisierung der Suchergebnisse
(Anwendungsabhängig)
• Kann interaktiveVerfeinerung der Suche unterstützen
(z.B. Facetted Search, Filter)
• Facettensuche muss hierbei besonders berücksichtigt werden
Sonntag, 25. August 13
Index, Document, Field
• Index: verwaltet Dokumente (,Document‘)
• Inhalte werden im (invertierten)
Index verwaltet (optimiert für Suchanfragen)
• Document: repräsentiert Objekt
• z.B.Webseite, E-mail, PDF-Dokument,Wikipedia-Artikel
etc. ...
• Field: Attribute eines Dokuments
• Metadaten bzw. Felder (,Fields‘)
• grob: key-value pair
• Facetten arbeiten auf Feldern
Sonntag, 25. August 13
Index-Struktur
(in memory / Objekt-Modell)
• Inhalte, die durchsucht werden
sollen, müssen in Dokumente &
Felder (Documents & Fields)
transformiert werden
=> Denormalisierung
• Beispiele für Felder (Field):
– Autor, Content,
Änderungsdatum,
Titel, Abstract,
Keywords etc.
• Suche:
– Anfrage über Felder und Werte
(sog. „Terme“)
– liefert passende Dokumente
Dokument
….
Feld
…Term Term
Feld
…Term Term
Dokument
….
Index
Sonntag, 25. August 13
LUCENE & SOLR
Software
Sonntag, 25. August 13
Apache Lucene
• Lucene Core
• Java-basiertes Framework für Indexing
und Suche
• bietet API zur Entwicklung von
Suchkomponenten
• basiert auf invertiertem Index
(und effizienterVerwaltung desselben...)
Sonntag, 25. August 13
Apache PyLucene
• Java Lucene
• Ist cross platform: 100%-pure Java
• PyLucene
• Python Portierung von Lucene Core (über JCC)
• API-kompatibel und Index-kompatibel
• Python Module aus PyLucene werden (via JCC)
direkt aus den Lucene Core Java-Sourcen erzeugt
• PyLucene Code benötigt eine JavaVM zur Laufzeit
Sonntag, 25. August 13
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)
• Facetted Search
Sonntag, 25. August 13
Aufbau von Lucene
• Anwendung
(eigener Code)
• Lucene
(Framework)
• Storage
(File, RAM, DB,…)
Index
IndexWriter IndexSearcher
Sonntag, 25. August 13
Apache Solr
• Solr = Such-Server auf Basis von Lucene
Core mit REST-like API.
• Solr basiert auf der Lucene Search Library
• 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, 25. August 13
23
Solr Indexing
XML Update
Handler
CSV Update
Handler
/update /update/csv
XML Update
with custom
processor
chain
/update/xml
Solr CELL:
Extracting
RequestHandler
(PDF, Word, …)
via Apache Tika
/update/extract
Lucene Index
Data Import
Handler
Database pull
RSS pull
Simple
transforms
SQL DB
RSS
feed
<doc>
<title>
Signature
processor
Logging
processor
Index
processor
Custom Transform
processor
PDF
HTTP POST
HTTP POST
pull
pull
Update Processor Chain (per handler)
Lucene
Text Index
Analyzers
Sonntag, 25. August 13
Solr Features
• Alle Lucene Features sowie ...
• Caching, Faceted Search und Filter
• Extraktion von Inhalt und Metadaten (via Apache Tika)
• Alternative Query Parser (dismax, edismax)
• Geo-Suche (Distanz)
• Data Schema (Numeric Types, Dynamic Fields, Unique Keys…)
• Diverse Client APIs für Java, Unix(shell-script), Python etc.
• Solr ist flexibel
• hochgradig anpassbar (XML-Konfigurationsdateien)
• ... und erweiterbar (Lucene/Solr plugins)
• ... und performant (unterstützt verteilte Indexes)
Sonntag, 25. August 13
Gemeinsamkeiten
• Lucene & Solr sind...
• Open Source (Apache 2.0 Lizenz)
• in Java entwickelt
• gut dokumentiert
• flexibel erweiterbar
• stabil und leistungsfähig
Sonntag, 25. August 13
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, 25. August 13
TECHNISCHE DETAILS
& BEISPIELE
Praxis
Sonntag, 25. August 13
Facetten
in Solr
Sonntag, 25. August 13
Solr: Getting started
• Download, Configure & Run
• Etliche XML-Konfigurationsdateien in conf
• solrconfig.xml
• schema.xml
• Start Server $ java -jar start.jar
• Solr4 benötigt Java 1.6
• Open Browser: http://localhost:8983/solr/
Sonntag, 25. August 13
Solr Konfiguration
• solrconfig.xml
• Allgemeine Konfiguration (Data Directory ...)
• Index Konfiguration (Lucene Parameter ...)
• Diverse Handler:
requestHandler, DataImportHandler,
queryResponseWriter...
• schema.xml
• Schema-Definition
<schema>
<types>
<fields>
<uniqueKey>
<defaultSearchField>
<solrQueryParser defaultOperator>
<copyField>
</schema>
Sonntag, 25. August 13
Facetten Konfiguration
• Erfolgt in solrconfig.xml
• einzelne Felder als Facet definieren
• Facetten-Typen wählbar (z.B. Rangefacet)
<str name="facet.field">author</str>
<str name="facet.mincount">1</str>
<str name="facet.range">price</str>
<int name="f.price.facet.range.start">0</int>
<int name="f.price.facet.range.end">600</int>
<int name="f.price.facet.range.gap">50</int>
Sonntag, 25. August 13
Solr Anwendung
• Daten "importieren" (=indexieren)
• via Kommandozeile und XML-Datei (UTF-8 encoding beachten!)
• via curl und CSV-Datei
• via DIH – Data Import Handler
• import aus Datenbank (via JDBC)
• import aus Web-Server (via HTTP GET)
• etc. (files, IMAP, xslt, ...)
$ curl http://localhost:8983/solr/update/csv
-F commit=true -F stream.file=/tmp/data.csv
$ java -Ddata=files -jar post.jar data*.xml
Sonntag, 25. August 13
Solr Suche
• Suche via http-Request
• z.B. http://localhost:8983/solr/select?q=demo
• liefert XML-Darstellung der Ergebnisse
(wahlweise auch JSON, Python oder CSV)
Sonntag, 25. August 13
Solr Facettensuche
• Facetten als Query Parameter
• Tipp: rows=0 liefert nur Facetten-Ergebnisse
http://localhost:8983/solr/select?q=a_name:abba
&facet=true&facet.field=a_type&rows=0
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">3</int>
</lst>
<result name="response" numFound="20" start="0"/>
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name="a_type">
<int name="person">6</int>
<int name="group">3</int>
</lst>
</lst>
</lst>
</lst>
</response>
Sonntag, 25. August 13
Solr: Beispiel
• Datenquelle: http://musicbrainz.org
• Daten: Solr-Instanz mit Tracks und Artists
(Beispiel aus Solr Buch ‘Solr Enterprise Search‘)
• Demos
• Solr Admin-GUI und Demo-GUI
• Beispiel-GUI
• ist anpassbar (via velocity templating)
• bietet bereits Facetten, highlighting, auto complete etc.
• Script zur Suche in Solr
• mittels Python client für Solr: SolrPy
http://localhost:8983/solr/browse
Sonntag, 25. August 13
Facetten
in Lucene
Sonntag, 25. August 13
Lucene in der Praxis
• Suchraumaufbereitung
• Anwendungssache!
• Textanalyse
• Klassen: StandardAnalyzer, SnowballFilter, PorterStemFilter, GermanAnalyzer
• Indexierung
• Klassen: IndexWriter, Document, Field
• Suche
• Klassen: IndexSearcher, QueryParser,Term
• Trefferanzeige
• Klassen: Hit, hit.score, Explanation
• Facetten
• Klassen: Facet, FacetCollector, ...
Sonntag, 25. August 13
Facetten in Lucene
• Basis der Facetten: taxonomy of categories
• Lucene arbeitet auf Kategorien einer Taxonomie
• Taxonomie wird bei Indexierung erstellt
• ... und in eigenem Index verwaltet
• Klassen: DirectoryTaxonomyWriter und DirectoryTaxonomyReader
• Kategorien pro Dokument – category path
• Klasse: CategoryPath
• Beispiele
• year/2012 // year/2011 etc.
• Kategorien können unterschiedliche Tiefe haben
• Year/2013/August
• Location/Germany/NRW/Sankt Augustin
Sonntag, 25. August 13
Beispiel: Indexierung
• Inhalte hinzufügen:
IndexWriter und Document
• Eigenschaften der Felder: Stored (yes/no),Analyzed (yes/no)
•
store = lucene.SimpleFSDirectory(lucene.File(storeDir))
analyzer = StandardAnalyzer(Version.LUCENE_CURRENT)
writer = lucene.IndexWriter(store, analyzer, True, #create
lucene.IndexWriter.MaxFieldLength.LIMITED)
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, 25. August 13
Hilfsklassen für Suche
und Indexierung
• Indexierung: FacetFields
• Erfassung von Kategorien zu einem Dokument (bei der Indexierung)
• arbeitet auf Liste von Kategorien
• Suche: FacetRequest
• eine Suchanfrage (Query) kann Facetten enthalten
• Details in FacetSearchParams spezifiziert (...)
• Suche: FacetsCollector
• ... unterstützt die Facettensuche, liefert (top-level) Kategorien einer Anfrage
• Suchergebnisse beinhalten Treffer (hits) und Facetten ("category roots")
• Der FacetsCollector liefert einen FacetResult pro FacetRequest
• FacetRequest erlaubt facets aggregation
Sonntag, 25. August 13
Beispiel:
Facetten hinzufügen
FacetFields facetFields = new FacetFields(taxoWriter);
Document doc = Document();
// add the needed fields to the document to be indexed
doc.add(new Field("isbn", "123-ABC ",
Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("name", "Lucene in Action",
Field.Store.YES, Field.Index.ANALYZED));
// add the categories to the taxonomy
List<CategoryPath> facetList = new ArrayList<CategoryPath>();
facetList.add(new CategoryPath("Author", "Erik Hatcher"));
facetList.add(new CategoryPath("Author", "Otis Gospodnetić"));
facetList.add(new CategoryPath("Published",
"2004", "December"));
// add the categories to the taxonomy
facetFields.addFields(doc, facetList);
indexWriter.addDocument(doc);
Sonntag, 25. August 13
PyLucene Demo
• Eine einfache Suchmaschine für Musik-Alben
• Datenquelle: http://musicbrainz.org
• Vorgehen:
• Script für Index-Erstellung (aus CSV)
• Python 2.7 und PyLucene 4.4 : IndexReleases.py
• ca. 120 lines of code
• Script zur Suche über Index
• Kommandozeile: $ python SearchReleases.py
• Anzeige von Suchergebnissen und Facetten
Sonntag, 25. August 13
Weitere Infos
• Solr Buch (veraltet: SolrVersion 3.x)
• www.solrenterprisesearchserver.com
• Solr Wiki (aktuell: SolrVersion 4.4)
• z.B. Details zu Faceted Search in Solr: SolrFacetingOverview
• Lucene Buch (2te Auflage)
• http://www.manning.com/hatcher2/
• Lucene / PyLucene
• http://lucene.apache.org /pylucene
• PySolr – Python Client
• https://github.com/toastdriven/pysolr
Sonntag, 25. August 13
Related Work
• Weitere Suchmaschinenframeworks
• Whoosh (Python)
• Xapian (C++)
• Elastiscsearch (Java)
Vergleich Solr vs. Elasticsearch http://solr-vs-elasticsearch.com
• Facetted Search Implementations
• Blog-Artikel von Michael McCandless
http://blog.mikemccandless.com/2012/12/fun-with-lucenes-faceted-search-module.html
• Meta-Frameworks
• z.B. Haystack (Python/Django)
• Bietet Suchfunktionalität als „Plugin“ für Web-Framework Django
• Definiert einheitliche API
• Unterstützt verschiedene „Search backends“
(z.B. Solr, Elasticsearch,Whoosh, Xapian)
Sonntag, 25. August 13
Copyrights
• Markennamen
• 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, 2013.de.pycon.org
• Bücher: Packtlib, Manning
• Long and winding road: Flickr (Creative Commons) Thanks to Pierre Metivier
• Fernsehturm Berlin: Flickr (Creative Commons) Thanks to myyorgda
• Statue outside the Centre for Life in Newcastle: Flickr (Share-a-Like) Thanks to Reith Lectures
• Indy Car in Garage: Flickr (creative commons share-alike) Thanks to John P.
• 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
Sonntag, 25. August 13
Kontakt / Fragen
• Thomas Koch: @tomy_koch
• Quellcode der Beispiele:
• Lucene: http://goo.gl/H3Uo23
• Solr: http://goo.gl/QyoHbG
• PyCon.DE 2013
http://2013.de.pycon.org
• PyCologne:
http://wiki.python-forum.de/pycologne
• EnArgus-Projekt
http://www.enargus.de
Sonntag, 25. August 13

Contenu connexe

En vedette

Enterprise search in Plone using Solr
Enterprise search in Plone using SolrEnterprise search in Plone using Solr
Enterprise search in Plone using SolrCalvin Hendryx-Parker
 
Enterprise search in plone using solr
Enterprise search in plone using solrEnterprise search in plone using solr
Enterprise search in plone using solrCalvin Hendryx-Parker
 
Solr typo3 konfiguration workshop
Solr typo3 konfiguration workshopSolr typo3 konfiguration workshop
Solr typo3 konfiguration workshopjweiland
 
The Seven Deadly Sins of Solr - By Jay Hill
The Seven Deadly Sins of Solr - By Jay Hill The Seven Deadly Sins of Solr - By Jay Hill
The Seven Deadly Sins of Solr - By Jay Hill lucenerevolution
 
Battle of the Giants Round 2 - Apache Solr vs. Elasticsearch
Battle of the Giants Round 2 - Apache Solr vs. ElasticsearchBattle of the Giants Round 2 - Apache Solr vs. Elasticsearch
Battle of the Giants Round 2 - Apache Solr vs. ElasticsearchSematext Group, Inc.
 
Grouping and Joining in Lucene/Solr
Grouping and Joining in Lucene/SolrGrouping and Joining in Lucene/Solr
Grouping and Joining in Lucene/Solrlucenerevolution
 
State of Solr Security 2016: Presented by Ishan Chattopadhyaya, Lucidworks
State of Solr Security 2016: Presented by Ishan Chattopadhyaya, LucidworksState of Solr Security 2016: Presented by Ishan Chattopadhyaya, Lucidworks
State of Solr Security 2016: Presented by Ishan Chattopadhyaya, LucidworksLucidworks
 
Faceted Search and Solr
Faceted Search and SolrFaceted Search and Solr
Faceted Search and Solrotisg
 
Working with deeply nested documents in Apache Solr
Working with deeply nested documents in Apache SolrWorking with deeply nested documents in Apache Solr
Working with deeply nested documents in Apache SolrAnshum Gupta
 
The Evolution of Lucene & Solr Numerics from Strings to Points: Presented by ...
The Evolution of Lucene & Solr Numerics from Strings to Points: Presented by ...The Evolution of Lucene & Solr Numerics from Strings to Points: Presented by ...
The Evolution of Lucene & Solr Numerics from Strings to Points: Presented by ...Lucidworks
 
Building and Running Solr-as-a-Service: Presented by Shai Erera, IBM
Building and Running Solr-as-a-Service: Presented by Shai Erera, IBMBuilding and Running Solr-as-a-Service: Presented by Shai Erera, IBM
Building and Running Solr-as-a-Service: Presented by Shai Erera, IBMLucidworks
 
Working with deeply nested documents in Apache Solr
Working with deeply nested documents in Apache SolrWorking with deeply nested documents in Apache Solr
Working with deeply nested documents in Apache SolrAnshum Gupta
 
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...Hakka Labs
 
Webinar: Building Conversational Search with Fusion
Webinar: Building Conversational Search with FusionWebinar: Building Conversational Search with Fusion
Webinar: Building Conversational Search with FusionLucidworks
 
Solr vs. Elasticsearch - Case by Case
Solr vs. Elasticsearch - Case by CaseSolr vs. Elasticsearch - Case by Case
Solr vs. Elasticsearch - Case by CaseAlexandre Rafalovitch
 

En vedette (16)

Enterprise search in Plone using Solr
Enterprise search in Plone using SolrEnterprise search in Plone using Solr
Enterprise search in Plone using Solr
 
Enterprise search in plone using solr
Enterprise search in plone using solrEnterprise search in plone using solr
Enterprise search in plone using solr
 
Solr typo3 konfiguration workshop
Solr typo3 konfiguration workshopSolr typo3 konfiguration workshop
Solr typo3 konfiguration workshop
 
The Seven Deadly Sins of Solr - By Jay Hill
The Seven Deadly Sins of Solr - By Jay Hill The Seven Deadly Sins of Solr - By Jay Hill
The Seven Deadly Sins of Solr - By Jay Hill
 
Battle of the Giants Round 2 - Apache Solr vs. Elasticsearch
Battle of the Giants Round 2 - Apache Solr vs. ElasticsearchBattle of the Giants Round 2 - Apache Solr vs. Elasticsearch
Battle of the Giants Round 2 - Apache Solr vs. Elasticsearch
 
Apache Solr vs Oracle Endeca
Apache Solr vs Oracle EndecaApache Solr vs Oracle Endeca
Apache Solr vs Oracle Endeca
 
Grouping and Joining in Lucene/Solr
Grouping and Joining in Lucene/SolrGrouping and Joining in Lucene/Solr
Grouping and Joining in Lucene/Solr
 
State of Solr Security 2016: Presented by Ishan Chattopadhyaya, Lucidworks
State of Solr Security 2016: Presented by Ishan Chattopadhyaya, LucidworksState of Solr Security 2016: Presented by Ishan Chattopadhyaya, Lucidworks
State of Solr Security 2016: Presented by Ishan Chattopadhyaya, Lucidworks
 
Faceted Search and Solr
Faceted Search and SolrFaceted Search and Solr
Faceted Search and Solr
 
Working with deeply nested documents in Apache Solr
Working with deeply nested documents in Apache SolrWorking with deeply nested documents in Apache Solr
Working with deeply nested documents in Apache Solr
 
The Evolution of Lucene & Solr Numerics from Strings to Points: Presented by ...
The Evolution of Lucene & Solr Numerics from Strings to Points: Presented by ...The Evolution of Lucene & Solr Numerics from Strings to Points: Presented by ...
The Evolution of Lucene & Solr Numerics from Strings to Points: Presented by ...
 
Building and Running Solr-as-a-Service: Presented by Shai Erera, IBM
Building and Running Solr-as-a-Service: Presented by Shai Erera, IBMBuilding and Running Solr-as-a-Service: Presented by Shai Erera, IBM
Building and Running Solr-as-a-Service: Presented by Shai Erera, IBM
 
Working with deeply nested documents in Apache Solr
Working with deeply nested documents in Apache SolrWorking with deeply nested documents in Apache Solr
Working with deeply nested documents in Apache Solr
 
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
 
Webinar: Building Conversational Search with Fusion
Webinar: Building Conversational Search with FusionWebinar: Building Conversational Search with Fusion
Webinar: Building Conversational Search with Fusion
 
Solr vs. Elasticsearch - Case by Case
Solr vs. Elasticsearch - Case by CaseSolr vs. Elasticsearch - Case by Case
Solr vs. Elasticsearch - Case by Case
 

Similaire à Facettensuche mit Lucene und Solr

Sh optifind praesentation_20130311
Sh optifind praesentation_20130311Sh optifind praesentation_20130311
Sh optifind praesentation_20130311Stefan Moises
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere RESTMartin Abraham
 
Search Evolution - Von Lucene zu Solr und ElasticSearch (Majug 20.06.2013)
Search Evolution - Von Lucene zu Solr und ElasticSearch (Majug 20.06.2013)Search Evolution - Von Lucene zu Solr und ElasticSearch (Majug 20.06.2013)
Search Evolution - Von Lucene zu Solr und ElasticSearch (Majug 20.06.2013)Florian Hopf
 
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...Cristina Vidu
 
chapter zürich rpa best practices
chapter zürich rpa best practiceschapter zürich rpa best practices
chapter zürich rpa best practicesCristina Vidu
 
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
 
ALTO, PAGE & Co. Formate für Volltexte
ALTO, PAGE & Co. Formate für VolltexteALTO, PAGE & Co. Formate für Volltexte
ALTO, PAGE & Co. Formate für Volltextecneudecker
 
Apache Solr und TYPO3 @ Frankfurt PHP usergroup 2011-01
Apache Solr und TYPO3 @  Frankfurt PHP usergroup 2011-01Apache Solr und TYPO3 @  Frankfurt PHP usergroup 2011-01
Apache Solr und TYPO3 @ Frankfurt PHP usergroup 2011-01Ingo Renner
 
Der Kölner UniversitätsGesamtkatalog - Praktischer Einsatz des KUG mit OpenBi...
Der Kölner UniversitätsGesamtkatalog - Praktischer Einsatz des KUG mit OpenBi...Der Kölner UniversitätsGesamtkatalog - Praktischer Einsatz des KUG mit OpenBi...
Der Kölner UniversitätsGesamtkatalog - Praktischer Einsatz des KUG mit OpenBi...flimm
 
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 DatenbankUlrike Schwinn
 
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
 
Jax2013 JavaScript für Java-Entwickler
Jax2013 JavaScript für Java-EntwicklerJax2013 JavaScript für Java-Entwickler
Jax2013 JavaScript für Java-EntwicklerOliver Zeigermann
 
Das Solr System - Suche nicht nur auf Planet TYPO3
Das Solr System - Suche nicht nur auf Planet TYPO3Das Solr System - Suche nicht nur auf Planet TYPO3
Das Solr System - Suche nicht nur auf Planet TYPO3Olivier Dobberkau
 
Schlanke Discovery-Lösung auf Basis von TYPO3. Der neue Bibliothekskatalog de...
Schlanke Discovery-Lösung auf Basis von TYPO3. Der neue Bibliothekskatalog de...Schlanke Discovery-Lösung auf Basis von TYPO3. Der neue Bibliothekskatalog de...
Schlanke Discovery-Lösung auf Basis von TYPO3. Der neue Bibliothekskatalog de...Felix Lohmeier
 
eXist für Editionsprojekte
eXist für EditionsprojekteeXist für Editionsprojekte
eXist für Editionsprojektecmahnke
 
Laudatio Workshop Entwicklersession zu Gemeinsamkeiten in Forschungsdatenrepo...
Laudatio Workshop Entwicklersession zu Gemeinsamkeiten in Forschungsdatenrepo...Laudatio Workshop Entwicklersession zu Gemeinsamkeiten in Forschungsdatenrepo...
Laudatio Workshop Entwicklersession zu Gemeinsamkeiten in Forschungsdatenrepo...Dennis Zielke
 

Similaire à Facettensuche mit Lucene und Solr (20)

Sh optifind praesentation_20130311
Sh optifind praesentation_20130311Sh optifind praesentation_20130311
Sh optifind praesentation_20130311
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere REST
 
Search Evolution - Von Lucene zu Solr und ElasticSearch (Majug 20.06.2013)
Search Evolution - Von Lucene zu Solr und ElasticSearch (Majug 20.06.2013)Search Evolution - Von Lucene zu Solr und ElasticSearch (Majug 20.06.2013)
Search Evolution - Von Lucene zu Solr und ElasticSearch (Majug 20.06.2013)
 
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
 
chapter zürich rpa best practices
chapter zürich rpa best practiceschapter zürich rpa best practices
chapter zürich rpa best practices
 
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
 
ALTO, PAGE & Co. Formate für Volltexte
ALTO, PAGE & Co. Formate für VolltexteALTO, PAGE & Co. Formate für Volltexte
ALTO, PAGE & Co. Formate für Volltexte
 
Apache Solr und TYPO3 @ Frankfurt PHP usergroup 2011-01
Apache Solr und TYPO3 @  Frankfurt PHP usergroup 2011-01Apache Solr und TYPO3 @  Frankfurt PHP usergroup 2011-01
Apache Solr und TYPO3 @ Frankfurt PHP usergroup 2011-01
 
Der Kölner UniversitätsGesamtkatalog - Praktischer Einsatz des KUG mit OpenBi...
Der Kölner UniversitätsGesamtkatalog - Praktischer Einsatz des KUG mit OpenBi...Der Kölner UniversitätsGesamtkatalog - Praktischer Einsatz des KUG mit OpenBi...
Der Kölner UniversitätsGesamtkatalog - Praktischer Einsatz des KUG mit OpenBi...
 
CKAN by Friedrich Lindenberg
CKAN by Friedrich LindenbergCKAN by Friedrich Lindenberg
CKAN by Friedrich Lindenberg
 
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
 
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?
 
Jax2013 JavaScript für Java-Entwickler
Jax2013 JavaScript für Java-EntwicklerJax2013 JavaScript für Java-Entwickler
Jax2013 JavaScript für Java-Entwickler
 
Azure WorkshopPart1 Intro
Azure WorkshopPart1   IntroAzure WorkshopPart1   Intro
Azure WorkshopPart1 Intro
 
Das Solr System - Suche nicht nur auf Planet TYPO3
Das Solr System - Suche nicht nur auf Planet TYPO3Das Solr System - Suche nicht nur auf Planet TYPO3
Das Solr System - Suche nicht nur auf Planet TYPO3
 
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
 
Schlanke Discovery-Lösung auf Basis von TYPO3. Der neue Bibliothekskatalog de...
Schlanke Discovery-Lösung auf Basis von TYPO3. Der neue Bibliothekskatalog de...Schlanke Discovery-Lösung auf Basis von TYPO3. Der neue Bibliothekskatalog de...
Schlanke Discovery-Lösung auf Basis von TYPO3. Der neue Bibliothekskatalog de...
 
eXist für Editionsprojekte
eXist für EditionsprojekteeXist für Editionsprojekte
eXist für Editionsprojekte
 
Überblick Solr
Überblick SolrÜberblick Solr
Überblick Solr
 
Laudatio Workshop Entwicklersession zu Gemeinsamkeiten in Forschungsdatenrepo...
Laudatio Workshop Entwicklersession zu Gemeinsamkeiten in Forschungsdatenrepo...Laudatio Workshop Entwicklersession zu Gemeinsamkeiten in Forschungsdatenrepo...
Laudatio Workshop Entwicklersession zu Gemeinsamkeiten in Forschungsdatenrepo...
 

Plus de 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 PythonThomas 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 CodeThomas 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 PythonThomas Koch
 
BSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtBSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtThomas Koch
 
Raspberry Pi und Python
Raspberry Pi und PythonRaspberry Pi und Python
Raspberry Pi und PythonThomas 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 GPIOThomas Koch
 
Python-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipsePython-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipseThomas Koch
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzThomas Koch
 
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemEnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemThomas 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 2011Thomas Koch
 
Getting Started with Dojo Toolkit
Getting Started with Dojo ToolkitGetting Started with Dojo Toolkit
Getting Started with Dojo ToolkitThomas 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 PyLuceneThomas Koch
 

Plus de Thomas Koch (14)

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
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen Einsatz
 
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
 

Facettensuche mit Lucene und Solr

  • 1. Facettensuche mit Lucene und Solr Praktische Umsetzung der Facettensuche Thomas Koch @tomy_koch FrOSCon St.Augustin 25. August 2013 Sonntag, 25. August 13
  • 2. über mich • Thomas Koch • Generation 40+ • Software-Entwickler • Python, JavaScript, Java ... • Python User Group PyCologne • PyCon.DE 2013 (Oktober, Köln) • OrbiTeam Software (Bonn) • BSCW (Collaboration Server) Sonntag, 25. August 13
  • 3. Agenda • Facettensuche • Kurzeinstieg, Motivation, Beispiele • Grundlegende IR-Konzepte • Index, Hits, Document, Fields • Überblick Lucene & Solr • Features, Gemeinsamkeiten und Unterschiede • Technische Details und Beispiele • Facettensuche in Solr • Facettensuche in Lucene • Verwandte Projekte und Informationsquellen Sonntag, 25. August 13
  • 5. Facettensuche: Einführung • Facette: Eigenschaft von Objekten (des Suchraums) • z.B. Preis, Farbe, Hersteller, Kategorie • erlaubt Einschränkung der Suchergebnisse • Facettensuche: ausgehend von einer einfachen Suchanfrage werden die angezeigten Suchergebnisse durch das Filtern nach bestimmten Kriterien (Facetten) fortlaufend eingegrenzt • auch bekannt als: guided navigation, faceted navigation, faceted browsing, explorative Suche Sonntag, 25. August 13
  • 6. Facettensuche - Motivation • Ziel: benutzerfreundliche, effiziente Erschließung von großen Datenmengen • benutzerfreundlich: Anwender kann Facetten in beliebiger Reihenfolge auswählen (und entfernen) • effizient: Kombination von Facetten wirkt wie Filter: UND-Verknüpfung Sonntag, 25. August 13
  • 7. Beispiel #1 • Online-Shops: Amazon, Ebay, … –Facetten: Preis, Hersteller, Typ etc. Sonntag, 25. August 13
  • 8. Beispiel #2 • Seek –facetted email browsing (seek: Erweiterung für Mozilla Thunderbird) Sonntag, 25. August 13
  • 9. Aspekte der Facettensuche an der Benutzerschnittstelle • Darstellung der Facetten – oben oder seitlich (links) anordnen – alle Facetten anzeigen, die im Kontext sinnvoll/ verfügbar sind – Facette sollte die Anzahl der erwarteten Treffer (bei Auswahl) anzeigen • Auswahl anwenden (=Suche verfeinern) – direkt bei der Auswahl einer Facette – oder nach Bestätigung durch Anwender 9 Sonntag, 25. August 13
  • 10. Beispiel #3 10 • Suche nach Forschungsvorhaben • Einfache Suchfunktion • Einschränkung über Facetten • Facetten: • Laufzeit • Kosten • Ort: Bundesland / Stadt Sonntag, 25. August 13
  • 13. Bausteine (1/2) • Suchraumaufbereitung • Erfassen der Objekte und Informationsextraktion z.B. Extraktion der Daten (Web-Crawler, DB-Export) • Textanalyse • Vorverarbeitung der Ausgangsdaten (Texte) in ,Wörter‘ (Terme) • Normalisierung mittels Stemmer,Tokenizer, Filter etc. • Indexierung • Textaufbereitung und -erfassung im Suchindex • Aktualisierung und Optimierung der Index-Strukturen Sonntag, 25. August 13
  • 14. Bausteine (2/2) • Suche • Erfolgt mittels einer Abfragesprache (Query Language) • Verknüpfung von Suchausdrücken per boolscher Logik • Liefert Treffer (Hits) und deren Ranking (Scores) • Trefferanzeige • Letzter Schritt:Visualisierung der Suchergebnisse (Anwendungsabhängig) • Kann interaktiveVerfeinerung der Suche unterstützen (z.B. Facetted Search, Filter) • Facettensuche muss hierbei besonders berücksichtigt werden Sonntag, 25. August 13
  • 15. Index, Document, Field • Index: verwaltet Dokumente (,Document‘) • Inhalte werden im (invertierten) Index verwaltet (optimiert für Suchanfragen) • Document: repräsentiert Objekt • z.B.Webseite, E-mail, PDF-Dokument,Wikipedia-Artikel etc. ... • Field: Attribute eines Dokuments • Metadaten bzw. Felder (,Fields‘) • grob: key-value pair • Facetten arbeiten auf Feldern Sonntag, 25. August 13
  • 16. Index-Struktur (in memory / Objekt-Modell) • Inhalte, die durchsucht werden sollen, müssen in Dokumente & Felder (Documents & Fields) transformiert werden => Denormalisierung • Beispiele für Felder (Field): – Autor, Content, Änderungsdatum, Titel, Abstract, Keywords etc. • Suche: – Anfrage über Felder und Werte (sog. „Terme“) – liefert passende Dokumente Dokument …. Feld …Term Term Feld …Term Term Dokument …. Index Sonntag, 25. August 13
  • 18. Apache Lucene • Lucene Core • Java-basiertes Framework für Indexing und Suche • bietet API zur Entwicklung von Suchkomponenten • basiert auf invertiertem Index (und effizienterVerwaltung desselben...) Sonntag, 25. August 13
  • 19. Apache PyLucene • Java Lucene • Ist cross platform: 100%-pure Java • PyLucene • Python Portierung von Lucene Core (über JCC) • API-kompatibel und Index-kompatibel • Python Module aus PyLucene werden (via JCC) direkt aus den Lucene Core Java-Sourcen erzeugt • PyLucene Code benötigt eine JavaVM zur Laufzeit Sonntag, 25. August 13
  • 20. 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) • Facetted Search Sonntag, 25. August 13
  • 21. Aufbau von Lucene • Anwendung (eigener Code) • Lucene (Framework) • Storage (File, RAM, DB,…) Index IndexWriter IndexSearcher Sonntag, 25. August 13
  • 22. Apache Solr • Solr = Such-Server auf Basis von Lucene Core mit REST-like API. • Solr basiert auf der Lucene Search Library • 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, 25. August 13
  • 23. 23 Solr Indexing XML Update Handler CSV Update Handler /update /update/csv XML Update with custom processor chain /update/xml Solr CELL: Extracting RequestHandler (PDF, Word, …) via Apache Tika /update/extract Lucene Index Data Import Handler Database pull RSS pull Simple transforms SQL DB RSS feed <doc> <title> Signature processor Logging processor Index processor Custom Transform processor PDF HTTP POST HTTP POST pull pull Update Processor Chain (per handler) Lucene Text Index Analyzers Sonntag, 25. August 13
  • 24. Solr Features • Alle Lucene Features sowie ... • Caching, Faceted Search und Filter • Extraktion von Inhalt und Metadaten (via Apache Tika) • Alternative Query Parser (dismax, edismax) • Geo-Suche (Distanz) • Data Schema (Numeric Types, Dynamic Fields, Unique Keys…) • Diverse Client APIs für Java, Unix(shell-script), Python etc. • Solr ist flexibel • hochgradig anpassbar (XML-Konfigurationsdateien) • ... und erweiterbar (Lucene/Solr plugins) • ... und performant (unterstützt verteilte Indexes) Sonntag, 25. August 13
  • 25. Gemeinsamkeiten • Lucene & Solr sind... • Open Source (Apache 2.0 Lizenz) • in Java entwickelt • gut dokumentiert • flexibel erweiterbar • stabil und leistungsfähig Sonntag, 25. August 13
  • 26. 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, 25. August 13
  • 29. Solr: Getting started • Download, Configure & Run • Etliche XML-Konfigurationsdateien in conf • solrconfig.xml • schema.xml • Start Server $ java -jar start.jar • Solr4 benötigt Java 1.6 • Open Browser: http://localhost:8983/solr/ Sonntag, 25. August 13
  • 30. Solr Konfiguration • solrconfig.xml • Allgemeine Konfiguration (Data Directory ...) • Index Konfiguration (Lucene Parameter ...) • Diverse Handler: requestHandler, DataImportHandler, queryResponseWriter... • schema.xml • Schema-Definition <schema> <types> <fields> <uniqueKey> <defaultSearchField> <solrQueryParser defaultOperator> <copyField> </schema> Sonntag, 25. August 13
  • 31. Facetten Konfiguration • Erfolgt in solrconfig.xml • einzelne Felder als Facet definieren • Facetten-Typen wählbar (z.B. Rangefacet) <str name="facet.field">author</str> <str name="facet.mincount">1</str> <str name="facet.range">price</str> <int name="f.price.facet.range.start">0</int> <int name="f.price.facet.range.end">600</int> <int name="f.price.facet.range.gap">50</int> Sonntag, 25. August 13
  • 32. Solr Anwendung • Daten "importieren" (=indexieren) • via Kommandozeile und XML-Datei (UTF-8 encoding beachten!) • via curl und CSV-Datei • via DIH – Data Import Handler • import aus Datenbank (via JDBC) • import aus Web-Server (via HTTP GET) • etc. (files, IMAP, xslt, ...) $ curl http://localhost:8983/solr/update/csv -F commit=true -F stream.file=/tmp/data.csv $ java -Ddata=files -jar post.jar data*.xml Sonntag, 25. August 13
  • 33. Solr Suche • Suche via http-Request • z.B. http://localhost:8983/solr/select?q=demo • liefert XML-Darstellung der Ergebnisse (wahlweise auch JSON, Python oder CSV) Sonntag, 25. August 13
  • 34. Solr Facettensuche • Facetten als Query Parameter • Tipp: rows=0 liefert nur Facetten-Ergebnisse http://localhost:8983/solr/select?q=a_name:abba &facet=true&facet.field=a_type&rows=0 <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">3</int> </lst> <result name="response" numFound="20" start="0"/> <lst name="facet_counts"> <lst name="facet_queries"/> <lst name="facet_fields"> <lst name="a_type"> <int name="person">6</int> <int name="group">3</int> </lst> </lst> </lst> </lst> </response> Sonntag, 25. August 13
  • 35. Solr: Beispiel • Datenquelle: http://musicbrainz.org • Daten: Solr-Instanz mit Tracks und Artists (Beispiel aus Solr Buch ‘Solr Enterprise Search‘) • Demos • Solr Admin-GUI und Demo-GUI • Beispiel-GUI • ist anpassbar (via velocity templating) • bietet bereits Facetten, highlighting, auto complete etc. • Script zur Suche in Solr • mittels Python client für Solr: SolrPy http://localhost:8983/solr/browse Sonntag, 25. August 13
  • 37. Lucene in der Praxis • Suchraumaufbereitung • Anwendungssache! • Textanalyse • Klassen: StandardAnalyzer, SnowballFilter, PorterStemFilter, GermanAnalyzer • Indexierung • Klassen: IndexWriter, Document, Field • Suche • Klassen: IndexSearcher, QueryParser,Term • Trefferanzeige • Klassen: Hit, hit.score, Explanation • Facetten • Klassen: Facet, FacetCollector, ... Sonntag, 25. August 13
  • 38. Facetten in Lucene • Basis der Facetten: taxonomy of categories • Lucene arbeitet auf Kategorien einer Taxonomie • Taxonomie wird bei Indexierung erstellt • ... und in eigenem Index verwaltet • Klassen: DirectoryTaxonomyWriter und DirectoryTaxonomyReader • Kategorien pro Dokument – category path • Klasse: CategoryPath • Beispiele • year/2012 // year/2011 etc. • Kategorien können unterschiedliche Tiefe haben • Year/2013/August • Location/Germany/NRW/Sankt Augustin Sonntag, 25. August 13
  • 39. Beispiel: Indexierung • Inhalte hinzufügen: IndexWriter und Document • Eigenschaften der Felder: Stored (yes/no),Analyzed (yes/no) • store = lucene.SimpleFSDirectory(lucene.File(storeDir)) analyzer = StandardAnalyzer(Version.LUCENE_CURRENT) writer = lucene.IndexWriter(store, analyzer, True, #create lucene.IndexWriter.MaxFieldLength.LIMITED) 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, 25. August 13
  • 40. Hilfsklassen für Suche und Indexierung • Indexierung: FacetFields • Erfassung von Kategorien zu einem Dokument (bei der Indexierung) • arbeitet auf Liste von Kategorien • Suche: FacetRequest • eine Suchanfrage (Query) kann Facetten enthalten • Details in FacetSearchParams spezifiziert (...) • Suche: FacetsCollector • ... unterstützt die Facettensuche, liefert (top-level) Kategorien einer Anfrage • Suchergebnisse beinhalten Treffer (hits) und Facetten ("category roots") • Der FacetsCollector liefert einen FacetResult pro FacetRequest • FacetRequest erlaubt facets aggregation Sonntag, 25. August 13
  • 41. Beispiel: Facetten hinzufügen FacetFields facetFields = new FacetFields(taxoWriter); Document doc = Document(); // add the needed fields to the document to be indexed doc.add(new Field("isbn", "123-ABC ", Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("name", "Lucene in Action", Field.Store.YES, Field.Index.ANALYZED)); // add the categories to the taxonomy List<CategoryPath> facetList = new ArrayList<CategoryPath>(); facetList.add(new CategoryPath("Author", "Erik Hatcher")); facetList.add(new CategoryPath("Author", "Otis Gospodnetić")); facetList.add(new CategoryPath("Published", "2004", "December")); // add the categories to the taxonomy facetFields.addFields(doc, facetList); indexWriter.addDocument(doc); Sonntag, 25. August 13
  • 42. PyLucene Demo • Eine einfache Suchmaschine für Musik-Alben • Datenquelle: http://musicbrainz.org • Vorgehen: • Script für Index-Erstellung (aus CSV) • Python 2.7 und PyLucene 4.4 : IndexReleases.py • ca. 120 lines of code • Script zur Suche über Index • Kommandozeile: $ python SearchReleases.py • Anzeige von Suchergebnissen und Facetten Sonntag, 25. August 13
  • 43. Weitere Infos • Solr Buch (veraltet: SolrVersion 3.x) • www.solrenterprisesearchserver.com • Solr Wiki (aktuell: SolrVersion 4.4) • z.B. Details zu Faceted Search in Solr: SolrFacetingOverview • Lucene Buch (2te Auflage) • http://www.manning.com/hatcher2/ • Lucene / PyLucene • http://lucene.apache.org /pylucene • PySolr – Python Client • https://github.com/toastdriven/pysolr Sonntag, 25. August 13
  • 44. Related Work • Weitere Suchmaschinenframeworks • Whoosh (Python) • Xapian (C++) • Elastiscsearch (Java) Vergleich Solr vs. Elasticsearch http://solr-vs-elasticsearch.com • Facetted Search Implementations • Blog-Artikel von Michael McCandless http://blog.mikemccandless.com/2012/12/fun-with-lucenes-faceted-search-module.html • Meta-Frameworks • z.B. Haystack (Python/Django) • Bietet Suchfunktionalität als „Plugin“ für Web-Framework Django • Definiert einheitliche API • Unterstützt verschiedene „Search backends“ (z.B. Solr, Elasticsearch,Whoosh, Xapian) Sonntag, 25. August 13
  • 45. Copyrights • Markennamen • 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, 2013.de.pycon.org • Bücher: Packtlib, Manning • Long and winding road: Flickr (Creative Commons) Thanks to Pierre Metivier • Fernsehturm Berlin: Flickr (Creative Commons) Thanks to myyorgda • Statue outside the Centre for Life in Newcastle: Flickr (Share-a-Like) Thanks to Reith Lectures • Indy Car in Garage: Flickr (creative commons share-alike) Thanks to John P. • 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 Sonntag, 25. August 13
  • 46. Kontakt / Fragen • Thomas Koch: @tomy_koch • Quellcode der Beispiele: • Lucene: http://goo.gl/H3Uo23 • Solr: http://goo.gl/QyoHbG • PyCon.DE 2013 http://2013.de.pycon.org • PyCologne: http://wiki.python-forum.de/pycologne • EnArgus-Projekt http://www.enargus.de Sonntag, 25. August 13