Programmēšana

10 padomi labākiem meklēšanas vaicājumiem Apache Solr

Apache Solr savā sirdī ir atvērtā koda meklētājprogramma, taču tas ir daudz kas vairāk. Tā ir NoSQL datu bāze ar darījumu atbalstu. Tā ir dokumentu datu bāze, kas piedāvā SQL atbalstu un izpilda to sadalītā veidā.

Iepriekš es jums parādīju, kā izveidot un ielādēt kolekciju Solr; jūs varat ielādēt šo kolekciju tūlīt, ja iepriekš to nebūtu izdarījis. (Pilnīga informācija: es strādāju uzņēmumā Lucidworks, kurā strādā daudzi no galvenajiem Solr projekta atbalstītājiem.)

Šajā ziņā es jums parādīšu vēl 10 lietas, ko varat darīt ar šo kolekciju:

1. Filtrējiet vaicājumus

Apsveriet šo vaicājumu:

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

Pēc savas sejas šis vaicājums izskatās līdzīgs, ja es tikko to izdarītu q = Provider_State: NC. Tomēr filtru vaicājumi atgriež tikai ID, un tie neietekmē rezultātu. Kešatmiņā ir arī filtru vaicājumi. Tas ir labs veids, kā atrast visatbilstošāko q = zila zamšāda iekšā nodaļa: apavi pretstatā nodaļa: apģērbs vai nodaļa: mūzika.

2. šķautņošana

Izmēģiniet šo vaicājumu:

// localhost: 8983 / solr / ipps / select? facet = on &facet.field = Provider_State& facet.limit = -1 & ievilkums = ieslēgts & q = *: * & wt = json

Augšdaļā tiek parādīts:

ID

Faceting sniedz jums kategoriju skaitu (cita starpā). Ja jūs ieviešat mazumtirdzniecības vietni, šādā veidā jūs sniedzat kategorijas un kategoriju skaitu departamentiem vai citus veidus, kā sadalīt krājumus.

3. Diapazona slīpējums

Pievienojiet to vaicājuma virknei: 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] & aspekts. 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]

Jūs saņemsiet:

Šis diapazona aspekts var palīdzēt sadalīt skaitlisko lauku diapazonu kategorijās. Ja palīdzat kādam atrast klēpjdatoru diapazonā no 2000 līdz 3000 ASV dolāriem, tas ir domāts jums. Varat veikt līdzīgu vaicājumu bez diapazonu kodēšanas, šādi rīkojoties: facet.range = Average_Total_Payments & facet.range.gap = 999.99 & facet.range.start = 2000 & facet.range.end = 10000

4. DocValues

Savā shēmā pārliecinieties, vai docValues atribūts ir atlasīts laukiem, uz kuriem jūs virzāties. Tādējādi lauks tiek optimizēts šāda veida meklējumiem un tiek saglabāts atmiņā vaicājuma laikā, kā parādīts šajā schema.xml fragmentā:

5. Pseidolauki

Jūs varat veikt darbības ar saviem datiem un atgriezt vērtību. Izmēģiniet šo:

// localhost: 8983 / solr / ipps / select? fl = Provider_Name,% 20Average_Total_Payments, price_category: if (min (0, sub (Average_Total_Payments, 5000)),% 22inexpensive% 22,% 22dārgs% 22) & ievilkums = ieslēgts & q = * : * & rindas = 10 & wt = json

Piemērā tiek izmantotas dažas no Solr iebūvētajām funkcijām, lai kategorizētu pakalpojumu sniedzējus kā dārgus vai lētus, pamatojoties uz vidējiem kopējiem maksājumiem. ES lieku cenu_kategorija: ja (min (0, sub (vidējie_kameras_maksājumi, 5000)), "lēti", "dārgi") iekš flvai lauku saraksts kopā ar diviem citiem laukiem.

6. Vaicājumu parsētāji

defType ļauj jums izvēlēties vienu no Solr vaicājuma parsētājiem. Noklusējuma standarta vaicājumu parsētājs ir ļoti piemērots konkrētiem mašīnu ģenerētiem vaicājumiem. Bet Solr ir arī Dismax un eDismax parsētāji, kas ir labāki normāliem cilvēkiem: Jūs varat noklikšķināt uz viena no tiem administratora vaicājuma ekrāna apakšdaļā vai pievienot defType = dismax uz vaicājuma virkni. Dismax parsētājs parasti nodrošina labākus rezultātus lietotāju ievadītiem vaicājumiem, atrodot “disjunkcijas maksimumu” jeb lauku, kurā ir visvairāk atbilstību, un pievienojot to rezultātam.

7. Palielināšana

Ja meklējat Provider_State: AL ^ 5 OR Provider_State: NC ^ 10, rezultāti Ziemeļkarolīnā tiks vērtēti augstāk nekā rezultāti Alabamā. To var izdarīt vaicājumā (q = ""). Tas ir svarīgs veids, kā manipulēt ar atgrieztajiem rezultātiem.

8. Datumu diapazoni

Lai gan datu piemērs neatbalsta nevienu meklēšanu datumu diapazonā, tas būtu formatēts tāpat timestamp_dt: [2016-12-31T17: 51: 44.000Z līdz 2017-02-20T18: 06: 44.000Z]. Solr atbalsta datuma veida laukus un datuma veida meklēšanu un filtrēšanu.

9. TF-IDF un BM25

Sākotnējais vērtēšanas mehānisms, ko Solr izmantoja (lai noteiktu, kuri dokumenti bija saistīti ar jūsu meklēšanas vienumu), tiek saukts par TF-IDF, kas attiecas uz “terminu biežumu pret reverso dokumentu biežumu”. Tas atgriež termina biežumu jūsu laukā vai dokumentā salīdzinājumā ar to, cik bieži šis termins parasti notiek jūsu kolekcijā. Šī algoritma problēma ir tā, ka "Troņu spēle" notiek 100 reizes 10 lappušu dokumentā, salīdzinot ar desmit reizēm 10 lappušu dokumentā, tas nepadara dokumentu 10 reizes atbilstošāku. Tas to padara vairāk būtisks, bet ne 10 reizes vairāk būtisks.

BM25 izlīdzina šo procesu, efektīvi ļaujot dokumentiem sasniegt piesātinājuma punktu, pēc kura tiek mazināta papildu notikumu ietekme. Visās jaunākajās Solr versijās pēc noklusējuma tiek izmantots BM25.

10. atkļūdošanaJautājums

Administratora vaicājumu konsolē varat pārbaudīt debugQuery, lai pievienotu debugQuery = ieslēgts uz Solr vaicājuma virkni. Pārbaudot rezultātus, jūs atradīsit šo rezultātu:

Cita starpā jūs redzat, ka tas izmanto LuceneQParser (standarta vaicājuma parsētāja nosaukums) un, virs tam, kā katrs rezultāts tika vērtēts. Jūs redzat pašu BM25 algoritmu un to, kā uzlabojumi ietekmēja punktu skaitu. Ja mēģināt atkļūdot meklēšanu, tas ir ļoti vērtīgs rīks!

Šie desmit Solr aspekti man noteikti palīdz, izmantojot Solr meklēšanai un rezultātu pielāgošanai.

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