1. Apache Solr i FINN.no
Helge Jenssen
Søkearkitekt FINN.no
2. FINN.no har brukt ulike søketeknologier
Sybase (Verity)
Fast 4
(FDS)
Fast 5 (ESP)
Apache Solr
Sesam/oppdrag Rubrikk
2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
3. FAST ble kjøpt av Microsoft og meldte i februar
2010 at de sluttet utvikling på Linux og UNIX
Vi måtte da vurdere om vi skulle bytte til FAST på
windows-server eller bytte til en annen teknologi
”With our 2010 products scheduled for release in a few months, we’ve
just started to plan for our next wave of products. As a part of that
planning process, we have decided that in order to deliver more
innovation per release in the future, the 2010 products will be the last
to include a search core that runs on Linux and UNIX.”
Bjørn Olstad
CTO, FAST
Distinguished Engineer, Microsoft
http://blogs.msdn.com/b/enterprisesearch/archive/2010/02/04/innovation-on-linux-and-unix.aspx
4. I et utviklingsmiljø med sterk javakompetanse er
Solr et bedre valg for vårt søketeknologibehov
FAST SOLR
Vi har erfaring med
Windows plattform + Linux Linux
Proprietær + Open Source
Eksperimentering
Lisens (pr søk evt. cpu) + Gratis og spesialiserte
løsninger
1 indeks pr maskin/cluster + Flere indekser pr maskin/cluster
Konsulentbasert + Communitybasert Enklere (billigere) å
løse problemer
Problem løses av FAST + Problem løses ved å lese kode
Skrevet i mange språk + Skrevet i Java
Mulig å skjønne
Dokumentert + Eksempler funksjonalitet
”Black Box” + Åpen
Ordbokbasert støtte for norsk språk Tredjepartsverktøy med norsk ordbok (ISPELL)
SBC for søkeordstatistikk + Ingen egen løsning for søkeordstatistikk
SBC for vedlikehold av synonymer + Ingen egen løsning for vedlikehold av
synonymer
Tilbyr Java - API Tilbyr Java – API
Mulig med endret
Funksjonalitet bestemt ved indeksering Funksjonalitet bestemt ved søk oppførsel uten
reindeksering
5.
6. Apache Solr In A Nutshell
• Open source enterprise search • Application Server
platform • Index (multicore) – solrconfig.xml
• Apache Lucene Index • Document – schema.xml
• Index/Query over HTTP – Fields – (explicit & dynamic)
• HTML administration interface – FieldTypes – schema.xm
• Scalability – Analyzers
– Horizontal (replikering) • CharFilterFactories
– Vertical (sharding) – PatternReplaceCharFilterFactory /
HTMLStripCharFilterFactory
• Plugin architecture • Tokenizers
– WhitespaceTokenizerFactory /
• Configurable caching PatternTokenizerFactory
• XML Configuration • TokenFilters
– WordDelimiterFilterFactory /
– Request Handlers LowerCaseFilterFactory /
– Response Writers SynonymFilterFactory
– Data Schema
8. Indeksering med egen javaklient
Document
Content put(adI Blocking Document
Document
Consumer Generate Document
Push d) Queue take() Document
Consumer
Consumer Document Generator
Client Consumer
Get ads ready to
be indexed
Index
Processor
Processor
Ad
Processor
Processor
Change Indexer add() Solr Index
ad Database
9. Index oppsett i FINN.no
• En eller flere instanser • Solrconfig.xml
for hvert marked – Konfigurasjon av solr
– En eller flere index’er – Requesthandler
(multicore) pr instans – Replikering
• Logging med log4j • Synonymer
– QueryLog – Egne synonym filer for
– Applikasjonslog hver index.
• Egen schema.xml og – Flere synonym filer med
solrconfig.xml for hver forskjellig bruk
indeks – Multi-ord synonymer ved
indeksering
• Felles felttyper
10. I tillegg til Junit på koden har vi
integrasjonstester på konfigurasjonen
• Tester den individuelle Solr-konfigurasjon for
hver index
• mvn verify -Pintegration-test
– Kjører opp en lokal indeks med jetty plugin (mvn
jetty:run-war)
– Indekserer ”dummy”-dokumenter med kjent innhold
– Søker med query-string og forventer treff
• Kan teste
– At fritekst-søk gir forventet resultat
– At ranking (qf) gir forventet resultat
11. Søk i FINN.no mot Solr bruker Apache Tiles,
Spring MVC og SolrJ
Endringer ved overgang
fra Fast til solr
Apache Spring MVC Search Search
Tiles Controller Command Service
SearchDisplay
Config SearchService.
Request QueryPolicy.
buildSearchRequest() CreateQuery()
Search
Search
Search
Solr
QueryResponse Index
SearchServiceResult
Transformer.
SearchResult transform()
SearchResult ResponseHandler.
transform()
Response
13. Erfaringer med Apache Solr
Dette er vi misfornøyd med Dette er vi fornøyd med
• Lucene Hunspell • Ytelse
lemmatiserer i overkant • Indivduelle indekser
mye • 1 prosess, war-fil, med
• Encoding; & er vanskelig separat solr-konfig, som
å få kontroll på kjøres som webapp i
• Synonymer, multi-ord Tomcat
synonymer • Skrevet i Java
14. Erfaringene i henhold til forventninger, men kanskje
undervurderte vi ordbok og synonym utfordringene
FAST SOLR
Lett å drifte
Windows plattform + Linux (webapp i tomcat)
Proprietær + Open Source
Egne indekser og
Lisens (pr søk evt. cpu) + Gratis konfigurasjoner for
egne behov
1 indeks pr maskin/cluster + Flere indekser pr maskin/cluster
Konsulentbasert + Communitybasert Enklere (billigere) å
løse problemer
Problem løses av FAST + Problem løses ved å lese kode
Skrevet i mange språk + Skrevet i Java
Ikke veldig mange
Dokumentert + Eksempler gode eksempler
”Black Box” + Åpen
Ordbokbasert støtte for norsk språk Tredjepartsverktøy med norsk ordbok (ISPELL)
Orbok og
synonymer var
SBC for søkeordstatistikk + Ingen egen løsning for søkeordstatistikk en større
I tillegg var ytelsen bedre for
SBC for vedlikehold av synonymer+ Ingen egen løsning
utfordring enn
vedlikehold av forventet
enn forventet
synonymer
Tilbyr Java - API Tilbyr Java – API
Funksjonalitet bestemt ved indeksering Funksjonalitet bestemt ved søk Ikke mye brukt enda
15. Apache Solr i FINN.no
Helge Jenssen
Søkearkitekt FINN.no