Programmering

10 tips for bedre søk i Apache Solr

Apache Solr er en åpen kildekode-søkemotor, men det er mye mer enn det. Det er en NoSQL-database med transaksjonsstøtte. Det er en dokumentdatabase som tilbyr SQL-støtte og utfører den på en distribuert måte.

Tidligere har jeg vist deg hvordan du oppretter og laster en samling i Solr; du kan laste inn samlingen nå hvis du ikke hadde gjort det tidligere. (Fullstendig redegjørelse: Jeg jobber for Lucidworks, som ansetter mange av de viktigste bidragsyterne til Solr-prosjektet.)

I dette innlegget vil jeg vise deg mer 10 ting du kan gjøre med den samlingen:

1. Filtrer spørsmål

Vurder dette spørsmålet:

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

På dette ansiktet ser denne spørringen ut som om jeg bare gjorde det q = Provider_State: NC. Imidlertid returnerer filtersøk bare ID-er, og de påvirker ikke poengsummen. Filterspørsmål er også hurtigbufrede. Dette er en god måte å finne det mest relevante på q = blå semsket skinn i avdeling: fottøy i motsetning til avdeling: klær eller avdeling: musikk.

2. Fasettering

Prøv dette spørsmålet:

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

Følgende returneres øverst:

ID

Faceting gir deg antall kategorier (blant annet). Hvis du implementerer et detaljhandelnettsted, gir du dette kategorier og kategoriteller for avdelinger eller andre måter du deler inn beholdningen på.

3. Rekkevidde

Legg dette til en spørringsstreng: facet.interval = Average_Total_Payments & 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]

Du vil få:

Denne fasetteringen av området kan hjelpe til med å dele opp et numerisk felt i kategorier av områder. Hvis du hjelper noen med å finne en bærbar datamaskin i området $ 2000 - $ 3000, er dette noe for deg. Du kan gjøre et lignende spørsmål uten å hardkode områdene ved å gjøre dette i stedet: facet.range = Average_Total_Payments & facet.range.gap = 999.99 & facet.range.start = 2000 & facet.range.end = 10000

4. DocValues

I skjemaet ditt må du sørge for at docValues attributt er valgt for felt du fasetterer på. Dette optimaliserer feltet for slike søk og sparer minne på spørringstid, som vist i dette skjema.xml-utdraget:

5. PseudoFields

Du kan utføre operasjoner på dataene og returnere en verdi. Prøv dette:

// localhost: 8983 / solr / ipps / select? fl = Provider_Name,% 20Average_Total_Payments, price_category: if (min (0, sub (Average_Total_Payments, 5000)),% 22inexpensive% 22,% 22expensive% 22) & innrykk = på & q = * : * & rader = 10 & wt = json

Eksemplet bruker noen av Solrs innebygde funksjoner for å kategorisere leverandører som dyre eller rimelige basert på gjennomsnittlig total betaling. jeg setter price_category: if (min (0, sub (Average_Total_Payments, 5000)), "billig", "dyrt") i fl, eller feltliste, sammen med to andre felt.

6. Spørringsparsere

defType lar deg velge en av Solrs spørringsparsere. Standard standard spørringsparser er veldig bra for spesifikke maskingenererte spørsmål. Men Solr har også Dismax- og eDismax-parsers, som er bedre for vanlige mennesker: Du kan klikke på en av dem nederst på skjermbildet for administrasjonsforespørsel eller legge til defType = dismax til spørringsstrengen din. Dismax-parseren gir vanligvis bedre resultater for brukerinngitte spørsmål ved å finne "maksimum for disjunksjon", eller feltet med flest treff, og legge det til poengsummen.

7. Boosting

Hvis du søker Provider_State: AL ^ 5 ELLER Provider_State: NC ^ 10, blir resultatene i North Carolina scoret høyere enn resultatene i Alabama. Du kan gjøre dette i spørringen din (q = ""). Dette er en viktig måte å manipulere de returnerte resultatene på.

8. Datoområder

Selv om eksempeldataene ikke støtter noen datoperiodesøk, ville de blitt formatert som om de gjorde det tidsstempel_dt: [2016-12-31T17: 51: 44.000Z TIL 2017-02-20T18: 06: 44.000Z]. Solr støtter datatypefelt og datatypesøk og filtrering.

9. TF-IDF og BM25

Den opprinnelige poengmekanismen som Solr brukte (for å bestemme hvilke dokumenter som var relevante for søkeordet ditt) kalles TF-IDF for "termfrekvens versus invers dokumentfrekvens." Den returnerer hvor ofte et begrep forekommer i feltet eller dokumentet ditt, mot hvor ofte det begrepet forekommer generelt i samlingen din. Problemet med denne algoritmen er at å ha "Game of Thrones" forekommer 100 ganger i et 10-siders dokument mot ti ganger i et 10-siders dokument, gjør ikke dokumentet 10 ganger mer relevant. Det gjør det mer relevant, men ikke 10 ganger mer relevant.

BM25 utjevner denne prosessen, slik at dokumenter effektivt når et metningspunkt, hvoretter virkningen av flere forekomster reduseres. Nyere versjoner av Solr bruker alle BM25 som standard.

10. feilsøking

I Admin Query-konsollen kan du sjekke debugQuery for å legge til debugQuery = på til Solr-spørringsstrengen. Hvis du inspiserer resultatene, finner du denne utgangen:

Blant annet ser du at det er å bruke LuceneQParser (navnet på standard spørringsparser) og, utover det, hvordan hvert resultat ble scoret. Du ser BM25-algoritmen i seg selv og hvordan boosts påvirket poengsummen. Hvis du prøver å feilsøke søket ditt, er dette et veldig verdifullt verktøy!

Disse ti aspektene ved Solr hjelper meg absolutt når jeg bruker Solr til å søke og justere resultatene mine.

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