HTML

View Péter Király's profile on LinkedIn

20 éves a MEK, 10 éves az EPA Én is
MEK önkéntes
vagyok

20 éves a MEK
10 éves az EPA

kirunews

Király Péter, keresés, Lucene, Solr, Java, Perl, PHP, OAI-PMH, webfejlesztés, digitális könyvtár, MARC, FRBR, RDA, Drupal, EAD, EAC, Europeana, eXtensibleCatalog.org, MEK, és sok minden más.

Friss topikok

Linkblog

Solr hogyan

2009.03.03. 15:37 kirunews

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

?q=ipod

mező szerinti keresés

?q=name:video

értéktartomány (-tól -ig) szerinti keresés

?q=price:[* TO 400]

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:

2.0 A többértékű mezőknél csak akkor használja az <arr> taget, ha az adott rekordban ténylegesen több érték van.
2.1 Minden többtérékű mezőnél <arr> taget használ.
2.2 <responseHeader> helyett <lst>
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

?q=video&rows=0&facet=true&facet.field=inStock&facet.query=price:[*+TO+500]&facet.query=price:[500+TO+*]

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.

?q=hatcher&wt=ruby&indent=on&facet=on&rows=0&facet.field=text&facet.prefix=xx&facet.limit=5&facet.mincount=1

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)

?q=*:*&rows=0&facet=true&facet.date=timestamp&facet.date.start=NOW/DAY-5DAYS&facet.date.end=NOW/DAY+1DAY&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

autoSuggest?terms=true&terms.fl=name&terms.lower=at&terms.prefix=at&terms.lower.incl=false&terms.upper=b

 

 

...

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=inStockEgyéb fontos Solr jellemzők:

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

 

 

Szólj hozzá!

A bejegyzés trackback címe:

http://kirunews.blog.hu/api/trackback/id/tr72977669

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben.

Nincsenek hozzászólások.