Top Banner
Suchen und Finden mit Lucene und Solr Florian Hopf 04.07.2012
70

Suchen und Finden mit Lucene und Solr

Feb 09, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Suchen und Finden mit Lucene und Solr

Suchen und Finden mit Lucene und Solr

Florian Hopf04.07.2012

Page 2: Suchen und Finden mit Lucene und Solr

http://techcrunch.com/2010/08/04/schmidt-data/

Page 3: Suchen und Finden mit Lucene und Solr
Page 4: Suchen und Finden mit Lucene und Solr

Suche Go

Page 5: Suchen und Finden mit Lucene und Solr

Suche Go

Ergebnis 1In Ergebnis 1 taucht der Suchbegriff auf...

Ergebnis 3… hier steht der Suchbegriff aus Ergebnis 3...

Ergebnis 2In Ergebnis 2 taucht der Suchbegriff auch auf ...

Page 6: Suchen und Finden mit Lucene und Solr

Suche Go

Ergebnis 1In Ergebnis 1 taucht der Suchbegriff auf...

Ergebnis 3… hier steht der Suchbegriff aus Ergebnis 3...

Ergebnis 2In Ergebnis 2 taucht der Suchbegriff auch auf ...

SQL

Page 7: Suchen und Finden mit Lucene und Solr
Page 8: Suchen und Finden mit Lucene und Solr

Talktitlecontenttalkdate

Speaker

name

Category

name

*

*

*

*

Page 9: Suchen und Finden mit Lucene und Solr

mysql> select * from talk where title like "%apache%";+----+-------------------------------------------+---------+------------+| id | title | content | talkdate |+----+-------------------------------------------+---------+------------+| 1 | Apache Karaf | ... | 2012-04-25 || 2 | Integration ganz einfach mit Apache Camel | ... | 2012-04-04 |+----+-------------------------------------------+---------+------------+2 rows in set (0.00 sec)

Page 10: Suchen und Finden mit Lucene und Solr

mysql> select * from talk t join talk_category tc join category c where t.id = tc.talk and tc.category = c.id and (c.name like '%OSGi%' or t.title like '%OSGi%' or t.content like '%OSGi%');+----+-------------------------------------------+---------+------------+------+----------+----+------+| id | title | content | talkdate | talk | category | id | name |+----+-------------------------------------------+---------+------------+------+----------+----+------+| 1 | Apache Karaf | ... | 2012-04-25 | 1 | 1 | 1 | OSGi || 2 | Integration ... | ... | 2012-04-04 | 2 | 1 | 1 | OSGi |+----+-------------------------------------------+---------+------------+------+----------+----+------+2 rows in set (0.00 sec)

Page 11: Suchen und Finden mit Lucene und Solr

● Performance?● Ranking?● False Positives● Ähnlichkeitssuche (Meyer <=> Meier)● Flexibilität?● Wartbarkeit?

Page 12: Suchen und Finden mit Lucene und Solr

Suche Go

Ergebnis 1In Ergebnis 1 taucht der Suchbegriff auf...

Ergebnis 3… hier steht der Suchbegriff aus Ergebnis 3...

Ergebnis 2In Ergebnis 2 taucht der Suchbegriff auch auf ...

Page 13: Suchen und Finden mit Lucene und Solr

File directory = new File(dir); File[] textFiles = directory.listFiles(new TextFiles());

for (File probableMatch : textFiles) { String text = readText(probableMatch); if (text.matches(".*" + Pattern.quote(term) + ".*")) { filesWithMatches.add(probableMatch.getAbsolutePath()); } }

Page 14: Suchen und Finden mit Lucene und Solr

● Skalierbarkeit?● Unterschiedliche Formate?● Ranking?● Kombination mit Datenbank?

Page 15: Suchen und Finden mit Lucene und Solr

Suche Go

Ergebnis 1In Ergebnis 1 taucht der Suchbegriff auf...

Ergebnis 3… hier steht der Suchbegriff aus Ergebnis 3...

Ergebnis 2In Ergebnis 2 taucht der Suchbegriff auch auf ...

SQL

Page 16: Suchen und Finden mit Lucene und Solr

Dokument 1

Die Stadtliegt in den

Bergen.

Dokument 2

Vom Berg kann man die Stadt

sehen.

Page 17: Suchen und Finden mit Lucene und Solr

Die 1

Stadt 1,2

liegt 1

in 1

den 1

Bergen 1

Vom 2

Berg 2

kann 2

man 2

die 2

sehen 2

Dokument 1

Die Stadtliegt in den

Bergen.

Dokument 2

Vom Berg kann man die Stadt

sehen.

1. Tokenization

Page 18: Suchen und Finden mit Lucene und Solr

die 1,2

stadt 1,2

liegt 1

in 1

den 1

bergen 1

vom 2

berg 2

kann 2

man 2

sehen 2

Dokument 1

Die Stadtliegt in den

Bergen.

Dokument 2

Vom Berg kann man die Stadt

sehen.

1. Tokenization

2. Lowercasing

Page 19: Suchen und Finden mit Lucene und Solr

die 1,2

stadt 1,2

liegt 1

in 1

den 1

berg 1,2

vom 2

kann 2

man 2

seh 2

Dokument 1

Die Stadtliegt in den

Bergen.

Dokument 2

Vom Berg kann man die Stadt

sehen.

1. Tokenization

2. Lowercasing

3. Stemming

Page 20: Suchen und Finden mit Lucene und Solr
Page 21: Suchen und Finden mit Lucene und Solr

● Java-Bibliothek● Invertierter Index● Analyzer● Query-Syntax● Relevanz-Algorithmus● KEIN Crawler● KEIN Document-Extractor

Page 22: Suchen und Finden mit Lucene und Solr

Quelle: http://www.ibm.com/developerworks/java/library/os-apache-lucenesearch/

Page 23: Suchen und Finden mit Lucene und Solr

● Indexieren:● Erstellen eines Documents● Festlegen des Analyzers● Indexieren über IndexWriter

● Suchen:● Verwendung des selben Analyzers● Parsen der Query mit QueryParser ● Auslesen über IndexSearcher/IndexReader ● Ausgabe über Document

Page 24: Suchen und Finden mit Lucene und Solr

Document

Field Name 1 Value 1title Value

Document

Field Name 1 Value 1title Integration ganz einfach mit Apache CamelField Name 1 Value 1title ValueField Name 1 Value 1speaker Christian Schneider

Field Name 1 Value 1title ValueField Name 1 Value 1date 20120404

Field Name 1 Value 1title ValueField Name 1 Value 1title Integration ganz einfach mit Apache CamelField Name 1 Value 1title ValueField Name 1 Value 1title Integration ganz einfach mit Apache Camel

Document

Field Name 1 Value 1title Value

Document

Field Name 1 Value 1title Integration ganz einfach mit Apache CamelField Name 1 Value 1title ValueField Name 1 Value 1speaker Christian Schneider

Field Name 1 Value 1title ValueField Name 1 Value 1date 20120425

Field Name 1 Value 1title ValueField Name 1 Value 1title Integration ganz einfach mit Apache CamelField Name 1 Value 1title ValueField Name 1 Value 1title Apache Karaf

Field Name 1 Value 1title ValueField Name 1 Value 1title Integration ganz einfach mit Apache CamelField Name 1 Value 1title ValueField Name 1 Value 1speaker Achim Nierbeck

Field Name 1 Value 1title ValueField Name 1 Value 1title Integration ganz einfach mit Apache CamelField Name 1 Value 1title ValueField Name 1 Value 1speaker Christian Schneider

Page 25: Suchen und Finden mit Lucene und Solr

● Index● ANALYZED● NOT_ANALYZED● NO

● Store● YES/NO

● Feldtyp● String, Numeric, Boolean

Page 26: Suchen und Finden mit Lucene und Solr
Page 27: Suchen und Finden mit Lucene und Solr

Tokenizer

TokenFilter

TokenFilter

TokenFilter

TokenFilter

Analyzer

Page 28: Suchen und Finden mit Lucene und Solr

StandardTokenizer

GermanNormalizationFilter

LowercaseFilter

StandardFilter

GermanLightStemFilter

Analyzer

Tokenizer

TokenFilter

TokenFilter

TokenFilter

TokenFilter

Analyzer

Page 29: Suchen und Finden mit Lucene und Solr

Directory

IndexWriter

Analyzer

Document

Page 30: Suchen und Finden mit Lucene und Solr
Page 31: Suchen und Finden mit Lucene und Solr

DEMO

Page 32: Suchen und Finden mit Lucene und Solr

Directory

IndexWriter

Analyzer

Document

IndexReaderIndexSearcher

QueryParser

Query

Page 33: Suchen und Finden mit Lucene und Solr
Page 34: Suchen und Finden mit Lucene und Solr

● TermQuery ● Apache ● title:Apache

● Boolean Query ● Apache AND Karaf

● PhraseQuery ● "Apache Karaf"

Page 35: Suchen und Finden mit Lucene und Solr

● WildcardQuery ● Integ* ● Te?t

● RangeQuery ● date:[20120705 TO 20121231]

● FuzzyQuery ● Schneyder~

Page 36: Suchen und Finden mit Lucene und Solr

title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430]

Page 37: Suchen und Finden mit Lucene und Solr

title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430]

BooleanQueryAND

RangeQuerydate:[...]

FuzzyQueryspeaker:schneyder

TermQuerytitle:apach

Page 38: Suchen und Finden mit Lucene und Solr

title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430]

BooleanQueryAND

RangeQuerydate:[...]

FuzzyQueryspeaker:schneyder

TermQuerytitle:apach

Page 39: Suchen und Finden mit Lucene und Solr

● FilterQueries● Ausschlusskriterium, kann gecacht werden

● Sortierung● Boosting

● Indexing-Time● Query-Time

Page 40: Suchen und Finden mit Lucene und Solr

score(q ,d )=coord (q ,d )∗queryNorm (q )∗∑t∈q

(tf (t , d )∗idf (t)2∗t.boost∗norm (t , d ))

Page 41: Suchen und Finden mit Lucene und Solr

score(q ,d )=coord (q ,d )∗queryNorm (q )∗∑t∈q

(tf (t , d )∗idf (t)2∗t.boost∗norm (t , d ))

Anzahl Term im Dokument

Feldlänge,Index-Boost

Invers zu Anzahl Dokumente, die

den Term enthalten

Anzahl der Matches imDokument

Query-Boost

Page 42: Suchen und Finden mit Lucene und Solr

DEMO

Page 43: Suchen und Finden mit Lucene und Solr
Page 44: Suchen und Finden mit Lucene und Solr

● Parser API● Zahlreiche Formate● Integriert OpenSource-Libs● Betrieb embedded oder über Server

Page 45: Suchen und Finden mit Lucene und Solr
Page 46: Suchen und Finden mit Lucene und Solr

DEMO

Page 47: Suchen und Finden mit Lucene und Solr
Page 48: Suchen und Finden mit Lucene und Solr

● Enterprise Search Server● Basiert auf Lucene● HTTP API● Index-Schema● Integriert häufig verwendete Lucene-Module● Facettierung● Dismax Query Parser● Admin-Interface

Page 49: Suchen und Finden mit Lucene und Solr

WebappWebapp

Client Solr Lucenehttp

XML, JSON, JavaBin, Ruby, ...

Page 50: Suchen und Finden mit Lucene und Solr

schema.xml solr-config.xml

dataconf

Solr Home

Lucene

Page 51: Suchen und Finden mit Lucene und Solr

schema.xml

Field Types

Fields

Page 52: Suchen und Finden mit Lucene und Solr
Page 53: Suchen und Finden mit Lucene und Solr
Page 54: Suchen und Finden mit Lucene und Solr

SearchHandler

DIH

SearchComp.

Monitoring

Lucene

SolrCell

UpdateRequestHandler

Replication

Search Index Index StartIndexing

DBURLFiles

Caches

Page 55: Suchen und Finden mit Lucene und Solr

solrconfig.xml

Lucene ConfigCaches

Request Handler

Search Components

Page 56: Suchen und Finden mit Lucene und Solr
Page 57: Suchen und Finden mit Lucene und Solr

WebappWebapp

Client Solr Lucenehttp

XML, JSON, JavaBin, Ruby, ...

Page 58: Suchen und Finden mit Lucene und Solr
Page 59: Suchen und Finden mit Lucene und Solr
Page 60: Suchen und Finden mit Lucene und Solr

DEMO

Page 61: Suchen und Finden mit Lucene und Solr
Page 62: Suchen und Finden mit Lucene und Solr

Master

SlaveSlave

Loadbalancer

Search

Replicate

Index

Page 63: Suchen und Finden mit Lucene und Solr

● Geospatial Search● More like this● Spellchecker● Suggester● Result Grouping● Function Queries● Sharding

Page 64: Suchen und Finden mit Lucene und Solr
Page 65: Suchen und Finden mit Lucene und Solr

● Suchserver basierend auf Apache Lucene● RESTful API● Dokumentenorientiert (JSON)● Schemafrei● Distributed Search● Near Realtime Search● No Commits (Transaction Log)

Page 66: Suchen und Finden mit Lucene und Solr

curl -XPOST 'http://localhost:9200/jugka/talk/' -d '{ "speaker" : "Florian Hopf", "date" : "2012-07-04T19:30:00", "title" : "Suchen und Finden mit Lucene und Solr"}'

{"ok":true,"_index":"jugka","_type":"talk","_id":"CeltdivQRGSvLY_dBZv1jw","_version":1}

Page 67: Suchen und Finden mit Lucene und Solr

curl -XGET 'http://localhost:9200/jugka/talk/_search?q=solr'{"took":29,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.054244425,"hits":[{"_index":"jugka","_type":"talk","_id":"CeltdivQRGSvLY_dBZv1jw","_score":0.054244425, "_source" : { "speaker" : "Florian Hopf", "date" : "2012-07-04T19:30:00", "title" : "Suchen und Finden mit Lucene und Solr"}

Page 68: Suchen und Finden mit Lucene und Solr

● http://lucene.apache.org● http://tika.apache.org● http://lucene.apache.org/solr/● http://elasticsearch.org● http://github.com/fhopf/lucene-solr-talk

Page 69: Suchen und Finden mit Lucene und Solr

http://nlp.stanford.edu/IR-book/

Page 70: Suchen und Finden mit Lucene und Solr

Vielen Dank!

http://www.florian-hopf.de@fhopf