Programiranje

10 nasvetov za boljše iskalne poizvedbe v Apache Solr

Apache Solr je v osnovi odprtokodni iskalnik, vendar je veliko več kot to. To je baza podatkov NoSQL s transakcijsko podporo. To je baza podatkov dokumentov, ki ponuja podporo za SQL in jo izvaja na porazdeljen način.

Pred tem sem vam že pokazal, kako ustvariti in naložiti zbirko v Solr; zbirko lahko naložite zdaj, če tega niste storili prej. (Popolno razkritje: delam za Lucidworks, ki zaposluje veliko ključnih sodelavcev pri projektu Solr.)

V tej objavi vam bom pokazal še 10 stvari, ki jih lahko naredite s to zbirko:

1. Filtrirajte poizvedbe

Razmislite o tej poizvedbi:

// localhost: 8983 / solr / ipps / select? fq = Provider_State: NC & indent = on & q = *: * & wt = json

Na prvi pogled je ta poizvedba podobna, kot če bi pravkar q = Provider_State: NC. Vendar poizvedbe s filtri vrnejo samo ID-je in ne vplivajo na rezultat. Poizvedbe filtrov so tudi predpomnjene. To je dober način za iskanje najbolj ustreznega q = modri semiš v oddelek: obutev v nasprotju z oddelek: oblačila ali oddelek: glasba.

2. Fasetiranje

Preizkusite to poizvedbo:

// localhost: 8983 / solr / ipps / select? facet = on &facet.field = Provider_State& facet.limit = -1 & zamik = vklopljen & q = *: * & wt = json

Na vrhu se vrne naslednje:

ID

Fasetiranje vam omogoča štetje kategorij (med drugim). Če uporabljate spletno mesto za prodajo na drobno, tako zagotovite kategorije in štetje kategorij za oddelke ali na druge načine, kako delite svoj inventar.

3. Fasetiranje dosega

Dodajte to v niz poizvedbe: facet.interval = Povprečna_skupna_plačila & facet.interval.set = [0,1999,99] & facet.interval.set = [2000,2999,99] & facet.interval.set = [3000,3999,99] & facet.interval.set = [4000,4999,99] & facet. interval.set = [5000,5999,99] & facet.interval.set = [6000,6999,99] & facet.interval.set = [7000,7999,99] && facet.interval.set = [8000,8999,99] & facet.interval.set = [9000 , 10000]

Dobili boste:

Ta fasetiranje obsega lahko pomaga razdeliti številsko polje na kategorije obsegov. Če nekomu pomagate najti prenosnik v razponu od 2000 do 3000 dolarjev, je to za vas. Namesto tega lahko naredite podobno poizvedbo brez trdega kodiranja obsegov: facet.range = Povprečna_skupna_plačila & facet.range.gap = 999,99 & facet.range.start = 2000 & facet.range.end = 10000

4. DocValues

V shemi preverite, ali je docVrednosti atribut je izbran za polja, ki jih fasetirate. To optimizira polje za tovrstna iskanja in prihrani pomnilnik v času poizvedbe, kot je prikazano v tem izvlečku schema.xml:

5. PseudoFields

Lahko delate s svojimi podatki in vrnete vrednost. Poskusite to:

// localhost: 8983 / solr / ipps / select? fl = Provider_Name,% 20Average_Total_Payments, price_category: if (min (0, sub (Average_Total_Payments, 5000)),% 22naraven% 22,% 22dragi% 22) & zamik = na & q = * : * & vrstice = 10 & wt = json

Primer uporablja nekatere vgrajene funkcije Solrja za kategorizacijo ponudnikov kot dragih ali poceni glede na povprečno skupno plačilo. položim kategorija_cenov: if (min (0, sub (Average_Total_Payments, 5000)), "poceni", "drago") v fl, ali seznam polj, skupaj z dvema drugima polji.

6. Razčlenjevalniki poizvedb

defType vam omogoča, da izberete enega od razčlenjevalnikov poizvedb Solr. Privzeti razčlenjevalnik standardnih poizvedb je res dober za določene strojno ustvarjene poizvedbe. Toda Solr ima tudi razčlenjevalnike Dismax in eDismax, ki so boljši za običajne ljudi: na dnu zaslona skrbniške poizvedbe lahko kliknete enega od njih ali dodate defType = dismax v poizvedbeni niz. Razčlenjevalnik Dismax na splošno daje boljše rezultate za poizvedbe, ki jih vnesejo uporabniki, tako da poišče "maksimum disjunkcije" ali polje z največ zadetki in ga doda k rezultatu.

7. Povečanje

Če iščete Provider_State: AL ^ 5 ALI Provider_State: NC ^ 10, bodo rezultati v Severni Karolini dosegli višje rezultate kot rezultati v Alabami. To lahko storite v svojem poizvedbi (q = ""). To je pomemben način za manipulacijo vrnjenih rezultatov.

8. Časovna obdobja

Čeprav primeri podatkov ne podpirajo nobenega iskanja v časovnem obdobju, bi bili, če bi bili, oblikovani tako timestamp_dt: [2016-12-31T17: 51: 44.000Z DO 2017-02-20T18: 06: 44.000Z]. Solr podpira polja z datumom in iskanje ter filtriranje po datumih.

9. TF-IDF in BM25

Prvotni mehanizem točkovanja, ki ga je Solr uporabil (da bi ugotovil, kateri dokumenti so pomembni za vaš iskalni izraz), se imenuje TF-IDF, kar pomeni »pogostnost izraza v primerjavi z obratno frekvenco dokumenta«. Vrne, kako pogosto se izraz pojavlja v vašem polju ali dokumentu, v primerjavi s tem, kako pogosto se ta izraz pojavlja v vaši zbirki. Težava tega algoritma je v tem, da "igra prestolov" v 10-stranskem dokumentu nastopi 100-krat v primerjavi z desetkrat v 10-stranskem dokumentu, zaradi česar dokument ni 10-krat bolj ustrezen. Naredi to več ustrezna, vendar ne 10-krat več ustrezne.

BM25 ta postopek zgladi in učinkovito pusti, da dokumenti dosežejo točko nasičenja, nato pa se učinek dodatnih pojavov ublaži. Vse novejše različice Solr privzeto uporabljajo BM25.

10. debugQuery

V konzoli Admin Query lahko preverite debugQuery, ki ga želite dodati debugQuery = vklopljeno v niz poizvedbe Solr. Če pregledate rezultate, boste našli ta izhod:

Med drugim vidite, da uporablja LuceneQParser (ime standardnega razčlenjevalnika poizvedb) in predvsem to, kako je bil ocenjen vsak rezultat. Vidite sam algoritem BM25 in kako so povečanja vplivala na točkovanje. Če poskušate odpraviti napake pri iskanju, je to zelo dragoceno orodje!

Teh deset vidikov Solra mi zagotovo pomaga pri uporabi Solra za iskanje in nastavljanje mojih rezultatov.

$config[zx-auto] not found$config[zx-overlay] not found