Søkemotor på 1-2-3 - En introduksjon til Solr og Lucene Aleksander M. Stensby Integrasco A/S 2008-12-04
Introduksjon Hvem er jeg? Aleksander M. Stensby Master i IKT (Universitetet i Agder og Carleton University) Senior Systemutvikler, Integrasco A/S Mønstergjenkjenning, Maskinlæring, Tekstanalyse, Skalerbarhet, Søk, Database design, etc. Lucene, Solr, Hibernate, Mysql, Java ;) Hva er Integrasco? Word of Mouth / vareprat på nett Trend Analyse Web Mining, Mønstergjenkjenning, Portalløsninger
Oversikt Litt historie Lucene arkitektur og tankegang Skalerbarhet Solr til unnsetning! Tutorial: Søkemotor på 1-2-3 (forhåpentligvis) 10 tips og triks (erfaringer)
Search Evangelist... - Hvorfor søk? Mange muligheter - de fleste koster! Søk på din egen webside? Fulltekst-søk i databasen? Kontrollere rangeringen? Hva vil du søke på? Tekst Strukturert data? Skreddersydde løsninger
Søk?
Litt historie Doug Cutting Lucene «a search indexer» Nutch «a spider / crawler» The Apache Software Foundation http://lucene.apache.org/ Flere under-prosjekter og inkubator prosjekter Lucene Java (Java-basert indeksering og søketeknologi) Nutch Lucy (C port med Pearl og Ruby bindinger) og Lucene.Net Solr (søkeserver basert på Lucene Java) Tika (Incubation prosjekt for tekstanalyse) Mahout (Subprosjekt for skalerbar maskinlæring) Compass Framework (Javabasert søkemotor rammeverk bygget på toppen av Lucene) Finnes porter til C#, C++, Python, Ruby, Delphi, Pearl, Lisp og PHP! Lucene Java 2.4.0 (8 oktober) Solr 1.3.0 (15 september)
Skrytehistorier / Powered By Lucene Eclipse, Jira, Nabble, Omgili, Jguru, Sourceforge.net, PostRank, Furl, IBM OmniFind, The Server Side, Simpy,...... Wikipedia: Perhaps the most significant deployment of Lucene is Wikipedia, where it powers search for the entire site. Solr CNET Reviews, Shopper.com, Gamespot, Digg, AOL, CitySearch, Sesam!,...
Apache Lucene - Arkitektur og tankegang Lucene: «Tekstsøkemotor API» Mer spesifikt så er Lucene «kjærnen» i en søkemotor det vanskelige... DU skriver de enkle tingene rundt; UI, input og parsing av data filer som videre dyttes inn i søkemotoren. Raskt og rikt på muligheter Lucene is high-performance, scalable, full-featured, open-source, and written in Java.
Apache Lucene - Arkitektur og tankegang «Index» - Samling av dokumenter Et dokument består av felter og verdier Dokumenter er immutable Men, de kan slettes, og en ny versjon kan legges til Termer / Tokens Indeksering Tokenizing oppdeling av termer / tokens (StringTokenizer?) Stopp ord, Stemming, Synonymer Scoring: tf * idf * lengthnorm Søk Highlighting, MoreLikeThis / Suggest IndexWriter og IndexReader / IndexSearcher
Solr Solr er en high performance søkeserver bygget på Lucene Java, med XML/HTTP og JSON/Python/Ruby API'er. Solr støtter Lucene funksjonaliteten samt faceted search, caching, replikering og et web admin grensesnitt. Utviklet av CNET Koden åpnet og gitt til Apache inkubatorprosjekt I Januar 2006 Lucene under-prosjekt siden Januar 2007 Selling-points : Stabilt Raskt God støtte / Stort brukermiljø Enkelt å kontrollere scoring Open source ;) NB: Solr er IKKE en erstatning for en relasjonsdatabase!
Solr Skalerbarhet!
Konfigurasjon schema.xml Beskrivelse av datastrukturen solrconfig.xml Beskrivelse av hvordan brukerne kan interaktere med dataen schema.xml definere hvordan hvert felt skal indekseres: Er det et tall? En streng? En dato? Skal man ha en default verdi hvis dokumentet mangler dette? Lages feltet av å kombinere verdiene fra andre felt? Skal feltet lagres så man kan hente ut verdien? Skal feltet indekseres? Skal det parses? Hvordan? ID felt?
Mulighetene Facets Grupper resultater etter kategori Støtte for opptil flere facets samtidig Returnerer antall treff I hver kategori Filtrering Skalering Replikering Sharding Master / Slave arkitektur Paginering, Synonymer, «Google Suggest», «Advanced search»,...
Spørringer / Querying Http request Lucene Query Syntax + litt ekstra Response: XML eller JSON
Sette inn og hente ut data Sette inn: POST <add> <doc> <field name= kkkk >sdfjk</field>... </doc>... </add> Commit Send <commit/> til http://host:port/solr/update Hente ut: http://host:port/solr/select/?q=hei Respons Slette data: POST By id: <delete><id>29</id></delete> By query: <delete><query>hei</query></delete>
Søkemotor på 1-2-3 Alternativ 1: - «The easy way» aka. Jetty Last ned Solr fra Apache Pakk ut Eksempel webapp Last inn data i Solr Søk! Alternativ 2: - «Servlet container of your choice» Kopeier solr.war til webapps mappen Definer solr home Med java system property solr.solr.home Eller via JINDI Definere Schema.xml Tilpasse Solrconfig.xml Legge til data i indeksen Gjøre søk
Søkemotor på 1-2-3 SolrJ Legge til dokumenter Slette dokumenter Enkle spørringer Litt mer spennende spørringer Facets Husk: untokenized fields! Sorting
10 tips og triks / best practices - Eller pitfalls.. Luke Toolbox Design riktig struktur Det tar tid å finne rett modell Tenk nøye gjennom hvordan du vil tokenize!! Benytt felt som indekseres forskjellig Sorting bruker minne! Batch indeksering! Vær forsiktig med optimize! Warm up prosedyre og caching! Replikering! Vær realistisk, og forutse størrelse på indeks! - Sharding Tuning, men ikke «over-tune» Merge factor, maxbuffereddocs, cached filters (Query Filter) Repeat. Repeat. Repeat...
Kilder Mail lister: java-user@lucene.apache.org solr-user@lucene.apache.org Søk I arkivet! http://www.nabble.com/lucene-f44.html http://markmail.org/ Jira Wikier http://wiki.apache.org/lucene-java/ http://wiki.apache.org/solr Gospodnetic, Otis; Erik Hatcher (2004). Lucene in Action. Manning Publications. ISBN 978-1-932394-28-3.
Takk! Takk for at dere kom! Har dere spørsmål angående Lucene eller Solr så er det bare å maile meg!... og jeg er selvsagt åpen for diskusjon på JavaPilsen (og julematen) etter møtet! Aleksander M. Stensby aleksander.stensby@integrasco.no