Rankering - principperne Rankering = sortering efter relevans –Relevans? –Hvis relevanskriterier? Rankering – det valgte kriterie –Topical relevance dvs. match på søgetermer Fordele –Umiddelbart til at implementere i Solr-laget Ulemper –a priori regler – søgeudtrykket afgørende
Scoring i Solr Baseret på klassisk IR-teori (Vector Space Model) Der dannes en relevansscore som afhænger af –Termfrekvensen (tf) –Den inverse dokumentfrekvens (idf) –Antallet af søgetermer fundet i dokumentet –Længdenormalisering Nærmere beskrivelse kan findes i Lucenes dokumentation af Similarity-klassen imilarity.html imilarity.html
Rankering i Solr Specificeres i søgeøjeblikket dvs en dynamisk proces - query level boosting Kan justeres live uden at man skal re-indeksere Benytter sig af relevansscore-værdier i indekset –Høj relevansscore => høj relevans –Lav relevansscore => lav relevans Implementeres som vægte der ganges på den relevansscore der er dannet under indekseringen Kræver brug af en speciel queryHandler, dismax, som ikke forstår boolske udtryk
Muligheder med query boosting i Solr Øgning af score for termer i udvalgte ord-felter eller frasefelter (qf pf operatorerne) Fremhævelse af dokumenter som matcher flere termer (tie operatoren) Fremhævelser af dokumenter baseret på hits på bestemte ord (bq operatoren)
Boost-værdierne er POSITIVE faktorer som ganges på relevans-scoren ParameterFormatVærdierNoter qf ^ dc.title^4 dc.creator^4 dc.subject^2 Værdien skal være > 0 og ganges på scoren pf ^ dc.title^8 dc.creator^8 dc.subject^3 Værdien skal være > 0 og ganges på scoren tie 0.1Værdien skal ligge i intervallet 0..1 bq( : )^ (dc.type:bog)^3Værdien skal være > 0 og ganges på scoren
Implementeringen i OpenSearch_0.12 rank[rank_general][word_boost]["dc.title"] = 3 rank[rank_general][phrase_boost]["dc.title"] = 6 rank[rank_general][word_boost]["dc.creator"] = 4 rank[rank_general][phrase_boost]["dc.creator"] = 8 rank[rank_general][word_boost]["dc.subject"] = 2 rank[rank_general][phrase_boost]["dc.subject"] = 3 rank[rank_general][word_boost]["cql.anyIndexes"] = 1 rank[rank_general][phrase_boost]["cql.anyIndexes"] = 1 rank[rank_general][tie] = 0.1
Et eksempel på udregning af score med boost – søgning på Martin Kongstad i kkb Den dannede søgestreng –CQL to DISMAX: (Martin Kongstad) -> ((Martin Kongstad) AND _query_:"{!dismax qf='dc.title^3 dc.creator^4 dc.subject^2 cql.anyIndexes^1' pf='dc.title^6 dc.creator^8 dc.subject^3 cql.anyIndexes^1' tie=0.1}Martin Kongstad ") Læg mærke til... –qf – ordsøgning –pf - frasesøgning
Martin Kongstad - resultat
Martin Kongstad - scoreværdier
Martin Kongstad – forklaring Dengang i 80'erne Martin Kongstad & Henrik Vesterberg Vesterberg Henrik Kongstad Martin Hit på både ord- og frasesøgning Han danser på sin... Kongstad Martin aut Kun hit på ordsøgning
Konsekvenser Poster med mange forekomster af en søgeterm kommer højere op Et fund i creator, title, subject får et boost Der vægtes højt, hvis hele den søgte streng findes Og endnu højere, hvis der er både ord- og frasesøgningshit samtidigt