apache solr kako i zašto ga koristiti - javacro conference · Što • apache solr - “open...

29
Apache Solr kako i zašto ga koristiti Josip Maslać, Nabava.net (Aplos d.o.o.)

Upload: others

Post on 10-Sep-2019

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Apache Solr

kako i zašto ga koristiti

Josip Maslać, Nabava.net (Aplos d.o.o.)

Page 2: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

LIKE “%....%” ??

Page 3: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Što

• Apache Solr - “open source enterprise search server”

• analizira, indeksira i pretražuje tekst

• ne služi za (trajno) spremanje podataka

Page 4: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

DB

DOC, XLS, PDF, RTF,

CSV, XML..

XML/JSON(Solr)

SOLRSOLR

Aplikacija

Rezultati pretraživanja

Page 5: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Mogućnosti

• želimo relevantne podatke - score-ing & boosting

– “article_title article_body^0.8”

• wildcard pretraživanje• wildcard pretraživanje

– “run*” => “run”, “runner”, “running”

• pretraživanje po rasponu

– “cijena:[1000 TO 1500]”

Page 6: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Mogućnosti

• fuzzy upiti

– “ranner~0.7” => “runner”

• boolean operatori• boolean operatori

– “web AND (developer OR programer)”

• geolokacijsko pretraživanje

– “sfield=location&pt=45.15,-93.85&d=5"

Page 7: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Mogućnosti

• stemming

– “riding”, "rider" => “ride”

• sinonimi• sinonimi

– “prijenosnik”, “laptop” => “notebook”

• autocomplete, more like this

– nema gotovih default rješenja

– “lako” za implementirati

Page 8: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Mogućnosti

• faceted (drilldown) pretraživanje

“Faceti”

Page 9: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Što

• (Java) web aplikacija - solr.war

http://localhost:8983/solr/

• Lucene ispod haube• Lucene ispod haube

– java library za pretraživanje teksta (od 2000g.)

– Solr & Lucene čvrsto povezani (isti repozitorij, commit-

eri, mail liste)

– Solr = Lucene + (web) server, admin konzola, cache-ove, replication, sharding, pluginovi...

Page 10: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Solr vs. DB

• ACID, sql JOIN & UPDATE

– Solr update = ponovno dodavanje cijelog dokumenta

• Solr == NoSQL ? (~truthy)• Solr == NoSQL ? (~truthy)

• optimiziran za pretraživanje, commit-ovi “spori”

• document oriented

– indeks je (jedna) denormalizirana tablica

Page 11: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Solr vs. DB

• Dokumenti u indeksu ~ retci u DB tablici

• Polja u dokumentima ~ stupci u DB tablici

uid nazivproizvoda

cijena proizvođač id kategorije1

...

id kategorije2

• Polja u Solr-u mogu biti multivalued

Page 12: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Analiza teksta

• Definirati očekivano ponašanje

– pažljivo konfigurirati i testirati

"wi-fi” => “wi-fi”, “wi fi”, “wifi” ?"wi-fi” => “wi-fi”, “wi fi”, “wifi” ?

• Analiza teksta

– tokenizacija - dijeljenje teksta na dijelove (tokene)

– tu zadaću obavljaju tokenizatori

Page 13: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Analiza teksta

The quick brown fox jumps over the lazy dog.

WhitespaceAnalyzerWhitespaceAnalyzer(whitespace splitting)

[The] [quick] [brown] [fox] [jumps] [over] [the] [lazy] [dog.]

Tokeni

Page 14: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Analiza teksta

The quick brown fox jumps over the lazy dog.

SimpleAnalyzer(lowercase & word boundary splitting)

[the] [quick] [brown] [fox] [jumps] [over] [the] [lazy] [dog]

Page 15: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Analiza teksta

The quick brown fox jumps over the lazy dog.

StopAnalyzer(lowercase & stop words removal)

[quick] [brown] [fox] [jumps] [over] [lazy] [dog]

Page 16: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Analiza teksta

The quick brown fox jumps over the lazy dog.

SnowballAnalyzer("Stemming" - svođenje riječi na njihov korijen)

[the] [quick] [brown] [fox] [jump] [over] [the] [lazy] [dog]

Page 17: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Kako

Page 18: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Kako

• solr.war => webapps/

• javiti container-u Solr lokaciju (JAVA_OPTS)

-Dsolr.solr.home={putanja_do_solr_direktorija}-Dsolr.solr.home={putanja_do_solr_direktorija}

• ${solr.home}/

– conf/

• solrconfig.xml

• schema.xml

određuje strukturu (“DDL”) indeksa

Page 19: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Indeksiranje

• handler-i za “ručni” unos

– Solr-u se da URL do podataka i podaci se POST-aju

• koristiti ćete DIH - DataImportHandler• koristiti ćete DIH - DataImportHandler

– komunicira s mnogobrojnim "izvorima" podataka

• DB, Email, CSV, XML, JSON, RichText...

– deklarativno definiranje načina indeksiranja

• XML konfiguracija

Page 20: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

DataImportHandler

• importDB.xml

<dataConfig>

<document>

<entity name=”proizvod” dataSource=”jdbc”

query=”SELECT id_proizvoda AS uid, naziv, cijena....

FROM Proizvodi”

pk=”uid”

transformer="TemplateTransformer">

<field column=”uid” name=”proizvod:{proizvod.id_proizvoda}” />

<field column=”tipDokumenta” template="1" />

<field column=”naziv” />

<field column=”cijena” />

...

</entity>

</document>

</dataconfig>

Page 21: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Pretraživanje

• pretraživanje: URL + parametri

– hrpa parametara, razumni default-i

• http://localhost:8983/solr/select/?q=naziv:lcd• http://localhost:8983/solr/select/?q=naziv:lcd

– &start=40

– &rows=20

– &fq=id_proizvodjaca:5

– &facet=on&facet.field=kategorija

– ...

Page 22: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Prijatelji

• &debugQuery=true

• administracijska konzola

Page 23: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Zašto

• provjeren & pouzdan

• brz, modularan & skalabilan

• jezično neovisan• jezično neovisan

– HTTP komunikacija putem XML/JSON-a

• API

– Java (SolrJ), PHP (solr-php-client), Ruby (Sunspot), Javascript (ajax-solr)

Page 24: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Začkoljice

Page 25: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Začkoljice

• Vrijeme indeksiranja

• DB podaci <> podaci u indeksu• DB podaci <> podaci u indeksu

• Analiza teksta

– Engleski i ostali “korišteniji” jezici u prednosti

Page 26: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Začkoljice

• upiti mogu biti “nešto” duži

– Nabava.net > Monitori – proizvođač Dell:

http://localhost:8939/solr/select/?fq=locale:1&fq={!tag=cijena}cijena12345:[* TO http://localhost:8939/solr/select/?fq=locale:1&fq={!tag=cijena}cijena12345:[* TO *]&fq=td:2&fq={!tag=s1}1_sseid:(2532)&fq={!tag=pk}pk:9&q={!tag=q}naziv:*&facet.query={!ex=cijena}cijena1:[* TO *]&facet.query={!ex=cijena}cijena2:[* TO *]&facet.query={!ex=cijena}cijena3:[* TO *]&facet.query={!ex=cijena}cijena4:[* TO *]&facet.field={!ex=s1}1_sseinf&facet.field={!ex=s20}20_sseinf&facet.field={!ex=s18}18_sseinf&facet.field={!ex=s1530}1530_sseinf&facet.field={!ex=s24}24_sseinf&facet.field={!ex=s17}17_sseinf&facet.field={!ex=s19}19_sseinf&facet.field={!ex=s1298}1298_sseinf&facet.field={!ex=s1625}1625_sseinf&facet.field={!ex=s2073}2073_sseinf&facet.field={!ex=s2074}2074_sseinf&facet.field={!ex=s2318}2318_sseinf&facet.field={!ex=s29}29_sseinf&facet.field={!ex=s2320}2320_sseinf&facet.field={!ex=s2319}2319_sseinf&facet.field=pk&facet=true&f.1_sseinf.facet.mincount=0&f.1_sseinf.facet.prefix=1›5:9:&f.20_sseinf.facet.mincount=0&f.20_sseinf.facet.prefix=1›5:9:&f.18_sseinf.facet.mincount=0&f.18_sseinf.facet.prefix=1›5:9:&f.1530_sseinf.facet.mincount=0&f.1530_sseinf.facet.prefix=1›5:9:&f.24_sseinf.facet.mincount=0&f.24_sseinf.facet.prefix=1›5:9:&f.17_sseinf.facet.mincount=0&f.17_sseinf.facet.prefix=1›5:9:&f.19_sseinf.facet.mincount=0&f.19_sseinf.facet.prefix=1›5:9:&f.1298_sseinf.facet.mincount=0&f.1298_sseinf.facet.prefix=1›5:9:&f.1625_sseinf.facet.mincount=0&f.1625_sseinf.facet.prefix=1›5:9:&f.2073_sseinf.facet.mincount=0&f.2073_sseinf.facet.prefix=1›5:9:&f.2074_sseinf.facet.mincount=0&f.2074_sseinf.facet.prefix=1›5:9:&f.2318_sseinf.facet.mincount=0&f.2318_sseinf.facet.prefix=1›5:9:&f.29_sseinf.facet.mincount=0&f.29_sseinf.facet.prefix=1›5:9:&f.2320_sseinf.facet.mincount=0&f.2320_sseinf.facet.prefix=1›5:9:&f.2319_sseinf.facet.mincount=0&f.2319_sseinf.facet.prefix=1›5:9:&facet.mincount=1&facet.limit=-1&hl=false&sort=popularnost asc,random_2 asc&rows=30

Page 27: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Alternative

• pogonjene Lucene-om:

– Compass

– Hibernate search– Hibernate search

• Sphinx

Page 28: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Resursi

• Solr Wiki: http://wiki.apache.org/solr

• Knjiga: Apache Solr 3 Enterprise Search server

• [ Knjiga: Lucene in Action ]• [ Knjiga: Lucene in Action ]

[email protected]

Page 29: Apache Solr kako i zašto ga koristiti - JavaCro Conference · Što • Apache Solr - “open source enterprise search server” • analizira , indeksira i pretražuje tekst •

Hvala