Mi az a facetta? A válasz példákkal: http://www.searchtools.com/info/faceted-metadata.html. Röviden: kategóriák különféle ortogonális halmazaiban fellelhető tulajdonságok együttese. De inkább: a találati halmaz automatikus kategorizálása az egyes rekordokban található mező-értékek alapján. Segítségükkel könnyűszerrel áttekinthető és szűrhető a találati halmaz.
Példák a facettás keresésre:
Alap-paraméterek:
q = keresőkérdés
mező szerinti keresés
értéktartomány (-tól -ig) szerinti keresés
wt = a válasz formátuma
// json formátum
?q=ipod&wt=json
// python formátum
?q=ipod&wt=python
// ruby formátum
?q=ipod&wt=ruby
// natív php formátum
?q=ipod&wt=php
// natív szerializált php formátum
?q=ipod&wt=phps
// xml formátum
?q=ipod&wt=xml
// xslt-vel átdolgozott xml formátum
?q=ipod&wt=xslt
indent = a válasz indentálása
// a válasz könnyen olvasható
?q=ipod&wt=json&indent=on
fl = a találati listában szereplő mezők
// találati lista csak a name, id és price mezőket tartalmazza
?q=video&fl=name,id,price
// minden mező
?q=video&fl=*
// ... és a speciális, Solr-generálta score-t (a találat súlyát)
?q=video&fl=name,id,price,score
sort = rendezés <mező> (asc|desc). Az alapérték: score desc.
// rendezés növekvő sorrendben
?q=video&sort=price asc&fl=name,id,price
// rendezés csökkenő sorrendben
?q=video&sort=price desc&fl=name,id,price
// rendezés több mezőre
?q=video&sort=inStock asc,price desc&fl=name,id,price
// rendezés score alapján
?q=video&sort=price desc,score asc&fl=name,id,price
start = a találati lista első rekordjának sorszáma (mint az SQL-ben az OFFSET)
rows = a találati lista elemeinek a száma (mint az SQL-ben a LIMIT)
// 10 találat az első találattól
?q=price:[* TO 4000]&start=0&rows=10
fq = szűrő keresés (Filter Query). Ez egy plusz szűrő a találati listán, vagyis a találati súlyokat nem befolyásolja, hanem csak a listát szűkíti. Fontos, hogy szűrők gyorstárazva vannak, így felgyorsítja a kereséseket. Az fq paraméter ismételhető, vagy egy kereséssé is kombinálható.
debugQuery = a keresés debug információinak megjelenítése
?q=cat:electronics+Belkin&version=2.1&start=1&rows=1&indent=on&fl=id+name+score&debugQuery=on
qt = a keresés típusa. Meghatározza, hogy a keresést melyik kezelő dolgozza fel. A lehetséges értékek:
standard | StandardRequestHandler |
dismax | DisMaxRequestHandler - egyszerű keresés több mezőben (a neve a Lucene DisjunctionMaxQueries-ből származik) |
spellchecker | SpellCheckerRequestHandler - megadja (a q paraméterrel) adott kifejezés helyesírási javaslatait |
Az egyes kezelők egyéni paraméterei
standard paraméterek
q.op = a keresés alapértelmezett logikai operátora (AND vagy OR)
df = az alapértelmezett mező
dismax paraméterek:
qf = mezők és súlyuk. A formátuma: fieldOne^2.3 fieldTwo fieldThree^0.4. A keresés csak ezekre a mezőkre fog kiterjedni. ( dismax queryben).
mm = a minimális lehetséges találat. Alapértelmezésben a q-kifejezések VAGY-lagosak, nem kötelezőek. Az mm-mel megmondhatjuk, hogy minimálisan hány keresőkifejezés legyen benne a találatokban. Több féle értéket meg lehet adni: "2", "75%", "2<-75%" (ha két kifejezés van, mindkettő legyen benne, ha több, akkor legalább 75%), "2<-1 5<80%" (ha kettő kifejezés van, mindkettő legyen benne, 3 és 5 között az aktuálisnál egyel kevesebb, e fölött 80%). Részletek itt.
pf = phrase fields
ps = Phrase Slop.
qs = Query Phrase Slop
tie = Tie breaker.
bq = boost query. Az eredménylistát lehet vele súlyozni, ugyanazzal a szintaxissal, mint a qf esetében. A keresés a configban vagy a qf-ben beállított mezőkben történik, nem az itt megadottakban.
bf = boost function
Egyes formátumok paraméterei
A JSON paraméterei
json.nl | az eremény NamedList-ként való listázása. Itt a sorrend fontosabb, mint a kulcsonként való elérés, ezt a Python és Ruby is használhatja. A lehetséges értékei: json.nl=flat (ez az alapérték) - egyszerű tömb: [name1,val1, name2,val2] json.nl=map - JSON objektum json.nl=arrarr - kételemű tömbök tömbje: [[name1,val1], [name2, val2], [name3,val3]] |
json.wrf | <function> - egy callback függvény hozzárendelése |
?q=ipod&wt=json&indent=on&json.nf=arrarr&json.wrf=showResults
Az xml paraméterei
version | Az XML response writer verziószáma. A lehetséges értékek:
| ||||||
stylesheet | Meg lehet adni egy XSLT stíluslapot, amire betesz a Solr egy hivatkozást |
Az xslt paramétere
tr | Az XSLT stíluslap. A conf/xslt könyvtárba kell elhelyezni. |
Ha XSLT 2.0-át ismerő Saxont akarjuk használni, a Jetty-t a következőképpen kell elindítani:
java -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -jar start.jar
A facettás keresés paraméterei
Általában minden, az alábbiakban felsorolt paraméter felülírható egy adott mező tekintetében az alábbi módon: f.<fieldName>.<originalParam>=<value> például: f.category.facet.limit=5
facet = a facettás keresés bekapcsolása. Csak a "true" kapcsolja be.
Keresés alapú facetta
facet.query = a facetta keresőkérdése
Mező alapú facetta
facet.field = a mező meghatározása (ismételhető). Mező alapú facetták esetén legalább egy ilyen paramétert meg kell adni.
// facet fields
?q=ipod&rows=0&facet=true&facet.limit=-1&facet.field=cat&facet.field=inStock
facet.prefix = a mezőérték kezdete. Csak az ennek megfelelő értékek lesznek facetták.
facet.sort = "true" rendezés mennyiség alapján, "false" az index-ben elfoglalt hely (általában ábécé sorrend) alapján. Az 1.4-ben true/false helyett count/index lesz a két érték.
facet.limit = hány érték szerepeljen a facettában. -1 = végtelen, alapérték: 100.
?rows=0&q=inStock:true&facet=true&facet.field=cat&facet.limit=5
facet.offset = offset a lapozáshoz. Alapérték: 0.
facet.mincount = a facetta minimális mennyisége. Alapérték: 0.
// 0-ás értékek nélkül
?q=ipod&rows=0&facet=true&facet.limit=-1&facet.field=cat&facet.mincount=1&facet.field=inStock
facet.missing = "true": hány hiányzó van? hány olyan dokumentum van, aminek nincs olyan mezője, amiből a facettát számoljuk?
// 0-ás értékek nélkül és hiányzók számával
?q=ipod&rows=0&facet=true&facet.limit=-1&facet.field=cat&f.cat.facet.missing=true&facet.mincount=1&facet.field=inStock
facet.method = milyen algoritmust használjon a Solr a mező faccettálásakor. "enum": minden érték figyelembevételével, "fc": a gyorsítótárban lévő dokumentumok mezőinek értéke alapján (alapérték)
facet.enum.cache.minDf = minimális dokumentum gyakoriság (csak a facet.method=enum esetén használható) (1.4-es paraméter)
Dátum alapú facetta
facet.date = a dátumot tartalmazó mezők nevei
facet.date.start = a dátum kiindulási pontja
facet.date.end = a dátum végpontja
facet.date.gap = az egységek időtartama (pl. facet.date.gap=+1DAY)
facet.date.hardend = (boolean) mit tegyen a Solr, ha az utolsó gap túlnyúlik az end-en? true: az utolsó gap kisebb lesz, false: az utolsó gap vége lesz az utolsó időpont az end helyett.
facet.date.other = egyéb dátumok. before, after, between. none, all.
A kivilágítás paraméterei
Általában minden, az alábbiakban felsorolt paraméter felülírható egy adott mező tekintetében az alábbi módon: f.<fieldName>.<originalParam>=<value> pl. f.contents.hl.snippets=2
hl = "true" - bekapcsolja a kivilágítást. Bármilyen egyéb érték kikapcsolja.
hl.fl = a kivilágításban számításba veendő mezők listája (vesszővel vagy szóközzel elválasztva). Alapérték: az alapértelmezett mezők (config, df, qf). Használható * is, még csonkolásban is (text_*).
hl.snippets = a szövegdarabok maximális száma. (Alapérték: 1)
hl.fragsize = a szövegdarabok karakterhossza. Alapérték: 100. 0 = az egész mező.
hl.mergeContiguous = "true": a folytatólagos szövegrészek egybeolvasztása. (Alapérték: false)
hl.requireFieldMatch = "true": csak azokat a mezőket világítja ki, amelyekben van találat. Alapérték: false.
hl.maxAnalyzedChars = a dokumentum hány karakterét vizsgálja meg a részletek előállításakor. Alapérték: 51200.
hl.alternateField = ha nincs kivilágítandó mező, akkor ennek a mezőnek az értékét írja ki.
hl.maxAlternateFieldLength = ha van hl.alternateField, akkor ez az érték adja meg a mező kiiratásának hosszát.
hl.formatter = formázó. Jelenleg csak "simple" lehet.
hl.simple.pre/hl.simple.post = a szövegrész előtt/után álló szöveg (Alapérték: <em>/</em>).
hl.fragmenter = a fragmentum-előállító megadása. Alapérték: "gap". Lehetséges még: "regex".
hl.usePhraseHighlighter = "true": egy speciális osztály (SpanScorer) használata kifejezéses keresés esetén. Alapérték: false.
hl.regex.slop = annak az értéke, hogy a regex milyen arányban térhet el a hl.fragsize-ban megadott értéktől (pl. 0.2 = 20%).
hl.regex.pattern = a regex minta regex fragmentáló esetén. Alapérték: [-\w ,/\n\"']{20,200}.
hl.regex.maxAnalyzedChars = regex esetén a maximális elemzett karakterhossz. Alapérték: 10000.
Hasonló dokumentumok keresése (MoreLikeThis)
Általános paraméterek
mlt.fl = a hasonlóság alapjául szolgáló mezők. Ha lehetséges, ezek TermVector stored-ak legyenek.
mlt.mintf = minimális kifejezés-gyakoriság (a dokumentumban)
mlt.mindf = minimális dokumentum gyakoriság (csak azok a kifejezések amelyek legalább ennyi dokumentumban szerepelnek)
mlt.minwl = minimális szó-hosszúság.
mlt.maxwl = maximális szó-hosszúság.
mlt.maxqt = a figyelembe veendő keresési kifejezések maximális száma.
mlt.maxntp = ha nincs eltárolva a mező TermVectora, akkor a parsolásnál mennyi legyen a figyelembe vett tokenek száma.
mlt.boost = true/false: érvényesüljön-e a keresés során a kifejezés relevancia szerinti súlya?
mlt.qf = keresésben szereplő mezők és súlyok (ahogy a dismax-ban van). A mezőket az mlt.fl paraméterben is meg kell adni.
Standard keresés dokumentumhasonlósági paraméterei
mlt = true: a dokumentumhasonlóság bekapcsolása
mlt.count = a hasonló dokumentumok maximális száma a találati listában
?q=apache&mlt=true&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1&fl=id,score
A leindexelt kifejezések listáinak megjelenítése (TermEnum)
A TermsComponent SearchComponent egy egyszerű plugin a Lucene TermEnum elérésére. Egyszerű, mivel a TermDocs- és a pozícióinfókat nem tartalmazza.
terms={true|false} - a TermsComponent be-/ki- kapcsolása
terms.fl={mező neve} - melyik mező kifejezéseit jelenítsük meg? kötelező.
terms.lower={az első kifejezés} - opcionális. melyik legyen az első megjelenítendő kifejezés. Ha nincs, akkor a mező első tárolt kifejezése lesz.
terms.lower.incl={true|false} - opcionális. Tartalmazza-e az elsőnek megkívánt kifejezést, vagy az utánna következő legyen az első? Alapértelmezés: true.
terms.mincount=<Integer> - opcionális. A kifejezés minimálisan ennyi dokumentumban forduljon elő.
terms.maxcount=<Integer> - opcionális. A kifejezés maximálisan ennyi dokumentumban forduljon elő. Alapérték: -1 (nincs maximális érték)
terms.prefix={String} - opcionális. Csak azon kifejezések, melyek ezzel a sztringgel kezdődnek.
terms.rows={integer} - a visszaadott kifejezések száma. Vagy ezt, vagy a terms.upper-t kötelező megadni. Ha nincs megadva, megnézi a "rows" konfigurációt(CommonParams.ROWS). Ha az sincs, akkor 10. Ha 0-nál kisebb, akkor az összes sor, maximum Integer.MAX_VALUE.
terms.upper={az utolsó kifejezés} - A lista utolsó kifejezése. Ez vagy a terms.rows kötelező.
terms.upper.incl={true|false} - opcionális. Tartalmazza-e a lista a terms.upper-ben megadott kifejezést? Alapérték: true.
Az első 10 kifejezés a "name" mezőből:
http://localhost:8983/solr/autoSuggest?terms=true&terms.fl=name
.. az a-től kezdve:
autoSuggest?terms=true&terms.fl=name&terms.lower=a
... a-tól b-ig
autoSuggest?terms=true&terms.fl=name&terms.lower=a&terms.upper=b
... az a utáni első kifejezéstől b-ig
autoSuggest?terms=true&terms.fl=name&terms.lower=a&terms.upper=b&terms.lower.incl=false
... a-tól b-ig 2 kifejezést:
autoSuggest?terms=true&terms.fl=name&terms.lower=a&terms.upper=b&terms.rows=2
keresési tipp
...
qt | Query Type - keresés típusa, melyik RequestHandler dolgozza fel a kérést. Alapértelmezés: standard. |
wt | Writer Type, vagyis a ResponseWriter típusa, vagyis milyen formátumú legyen a találati lista. Alapértelmezése: standard. Néhány egyéb típus: json, python, php, phps (ezeket külön kell engedélyezni a konfigurációban - a phps a serializált PHP változó), xml (default) |
q | Query Term - a keresőkérdés |
rows | A megjelenítendő rekordok száma |
indent | a találat formázása (pl. json esetén) |
fl | fields - a visszadatott mezők megadása. A score egy speciális számított mező, a dokumentum keresés során adott súlyát adja vissza. A mezőket vesszővel kell elválasztani. * is használható |
sort | Rendezés. sort=<mezőnév> [desc|asc] |
Egyszerű facetták. Nekünk kell megadni a mezőt és a mezőértéket is (SimpleFacetedRequestHandler).
?qt=qfacet&q=video&fc=inStock:true&fc=inStock:false
Dinamikus facetták. A mezőket kell megadni és a Solr a mezők tartalma alapján gyártja a facettákat (DynamicFacetedRequestHandler).
?qt=dfacet&q=video&ff=cat&ff=inStock
Egyéb fontos Solr jellemzők:
- Relációs adatbázis indexelése: DataImportHandler (alias DIH): http://wiki.apache.org/solr/DataImportHandler
Indexelés URL-en keresztül:
/solr/update?stream.body=<commit/>
/solr/update?stream.body=<optimize/>
/solr/update?stream.body=<delete><query>office:Bridgewater</query></delete>
Luke paraméterek
Alap URL:
/admin/luke
numTerms = az egyes mezők leggyakoribb kifejezéseinek száma (10)
/admin/luke?fl=text&numTerms=100
fl = a kiiratandó mezők neve
/admin/luke?fl=text&numTerms=100
id = azon dokumentum lekérdezése, melynek az id-je ezzel az értékkel egyezik meg
/admin/luke?id=SOLR1000
docId = ezt az értéket használó Lucene documentum lekérése
/admin/luke?docId=2
show=schema = a sémafájl lekérdezése
/admin/luke?show=schema
A Luke használható a wt és tr paraméterekkel
/admin/luke?wt=xslt&tr=luke.xsl