apache solr i finn.no
DESCRIPTION
Gjennomgang av hvordan vi bruker Apache Solr til rubrikksøk i FINN.no. Lyntale for Baksia på Commuinties in Action 2012TRANSCRIPT
Apache Solr i FINN.noHelge JenssenSøkearkitekt FINN.no
FINN.no har brukt ulike søketeknologier
Sybase (Verity)
Fast 4 (FDS)
Fast 5 (ESP)
Apache Solr
2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
Sesam/oppdrag Rubrikk
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 OlstadCTO, FASTDistinguished Engineer, Microsoft
http://blogs.msdn.com/b/enterprisesearch/archive/2010/02/04/innovation-on-linux-and-unix.aspx
I et utviklingsmiljø med sterk javakompetanse er Solr et bedre valg for vårt søketeknologibehov
FAST SOLR
Windows plattform + Linux
Proprietær + Open Source
Lisens (pr søk evt. cpu) + Gratis
1 indeks pr maskin/cluster + Flere indekser pr maskin/cluster
Konsulentbasert + Communitybasert
Problem løses av FAST + Problem løses ved å lese kode
Skrevet i mange språk + Skrevet i Java
Dokumentert + Eksempler
”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
Funksjonalitet bestemt ved indeksering Funksjonalitet bestemt ved søk
Eksperimentering og spesialiserte løsninger
Vi har erfaring med Linux
Enklere (billigere) å løse problemer
Mulig å skjønne funksjonalitet
Mulig med endret oppførsel uten reindeksering
Apache Solr In A Nutshell
• Open source enterprise search platform
• Apache Lucene Index• Index/Query over HTTP• HTML administration interface
• Scalability– Horizontal (replikering)– Vertical (sharding)
• Plugin architecture
• Configurable caching• XML Configuration
– Request Handlers– Response Writers– Data Schema
• Application Server• Index (multicore) – solrconfig.xml• Document – schema.xml
– Fields – (explicit & dynamic)
– FieldTypes – schema.xm
– Analyzers• CharFilterFactories
– PatternReplaceCharFilterFactory / HTMLStripCharFilterFactory
• Tokenizers– WhitespaceTokenizerFactory /
PatternTokenizerFactory• TokenFilters
– WordDelimiterFilterFactory / LowerCaseFilterFactory / SynonymFilterFactory
Hvordan bruker vi Apache Solr i FINN.no?
take()
Indeksering med egen javaklient
Solr IndexDatabase
ContentPushClient
put(adId)
BlockingQueue
DocumentConsumer
DocumentConsumer
DocumentConsumerDocumentConsumer
DocumentGenerator
Indexer
GenerateDocument
IndexA
d
add()
Get ads ready
to be indexed
Changead
ProcessorProcessorProcessorProcessor
Index oppsett i FINN.no
• En eller flere instanser for hvert marked– En eller flere index’er
(multicore) pr instans
• Logging med log4j– QueryLog– Applikasjonslog
• Egen schema.xml og solrconfig.xml for hver indeks
• Felles felttyper
• Solrconfig.xml– Konfigurasjon av solr– Requesthandler– Replikering
• Synonymer– Egne synonym filer for
hver index.– Flere synonym filer
med forskjellig bruk– Multi-ord synonymer
ved indeksering
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
Endringer ved overgang fra Fast til solr
Søk i FINN.no mot Solr bruker Apache Tiles, Spring MVC og SolrJ
SolrIndex
ApacheTiles
Spring MVCController
SearchCommand
SearchService
Request
Search
Search
Search
QueryResponse
Response
SearchServiceResult
SearchResult
SearchDisplayConfig SearchService.
buildSearchRequest()QueryPolicy.
CreateQuery()
Transformer.transform()
SearchResult ResponseHandler.transform()
Nettverkstopologi - 1 master + 4 slaver
Erfaringer med Apache Solr
Dette er vi misfornøyd med
• Lucene Hunspell lemmatiserer i overkant mye
• Encoding; & er vanskelig å få kontroll på
• Synonymer, multi-ord synonymer
Dette er vi fornøyd med
• Ytelse• Indivduelle indekser• 1 prosess, war-fil, med
separat solr-konfig, som kjøres som webapp i Tomcat
• Skrevet i Java
Erfaringene i henhold til forventninger, men kanskje undervurderte vi ordbok og synonym utfordringene
FAST SOLR
Windows plattform + Linux
Proprietær + Open Source
Lisens (pr søk evt. cpu) + Gratis
1 indeks pr maskin/cluster + Flere indekser pr maskin/cluster
Konsulentbasert + Communitybasert
Problem løses av FAST + Problem løses ved å lese kode
Skrevet i mange språk + Skrevet i Java
Dokumentert + Eksempler
”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
Funksjonalitet bestemt ved indeksering Funksjonalitet bestemt ved søk
Egne indekser og konfigurasjoner for egne behov
Lett å drifte (webapp i tomcat)
Enklere (billigere) å løse problemer
Ikke veldig mange gode eksempler
Ikke mye brukt enda
Orbok og synonymer var en større utfordring enn forventet
I tillegg var ytelsen bedre enn forventet
Apache Solr i FINN.noHelge JenssenSøkearkitekt FINN.no