Ohjelmointi

10 vinkkiä parempiin hakukyselyihin Apache Solrissa

Apache Solr on sydämeltään avoimen lähdekoodin hakukone, mutta se on paljon enemmän. Se on NoSQL-tietokanta, jolla on kaupallinen tuki. Se on asiakirjatietokanta, joka tarjoaa SQL-tukea ja suorittaa sen hajautetulla tavalla.

Aiemmin olen osoittanut, kuinka luoda ja ladata kokoelma Solriin; voit ladata kokoelman nyt, ellet ole tehnyt sitä aiemmin. (Täysi paljastus: Työskentelen Lucidworksissä, joka työllistää monia Solr-projektin avaintekijöitä.)

Tässä viestissä näytän sinulle vielä 10 muuta asiaa, joita voit tehdä kokoelmalla:

1. Suodata kyselyt

Harkitse tätä kyselyä:

// paikallinen isäntä: 8983 / solr / ipps / select? fq = Provider_State: NC & indent = päällä & q = *: * & wt = json

Itse asiassa tämä kysely näyttää samanlaiselta kuin jos vain tekisin q = Provider_State: NC. Suodatuskyselyt palauttavat kuitenkin vain tunnukset, eivätkä ne vaikuta pisteisiin. Suodatuskyselyt tallennetaan myös välimuistiin. Tämä on hyvä tapa löytää sopivin q = sininen mokka sisään osasto: jalkineet toisin kuin osasto: vaatteet tai osasto: musiikki.

2. Faceting

Kokeile tätä kyselyä:

// paikallinen isäntä: 8983 / solr / ipps / select? facet = päällä &facet.field = Provider_State& facet.limit = -1 & sisennys = päällä & q = *: * & wt = json

Yläosassa näkyy seuraava:

Henkilötunnus

Faceting antaa sinulle luokkamäärät (muun muassa). Jos olet toteuttamassa vähittäiskauppasivustoa, annat tällä tavoin luokat ja luokkamäärät osastoille tai muilla tavoilla jakaa varastosi.

3. Alueen ulottuvuus

Lisää tämä kyselymerkkijonoon: 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] & puoli. 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]

Sinä tulet saamaan:

Tämä aluejoukko voi auttaa jakamaan numeerisen kentän alueiden luokkiin. Jos autat jotakuta löytämään kannettavan tietokoneen 2000 dollarin ja 3000 dollarin välillä, tämä on sinulle. Voit tehdä samanlaisen kyselyn ilman alueiden kovaa koodaamista tekemällä näin: facet.range = Average_Total_Payments & facet.range.gap = 999.99 & facet.range.start = 2000 & facet.range.end = 10000

4. DocValues

Varmista skeemassasi, että docValues attribute on valittu kentille, joihin olet menossa. Tämä optimoi kentän tällaisille hauille ja säästää muistiin kyselyhetkellä, kuten tässä schema.xml-otteessa esitetään:

5. Pseudokentät

Voit tehdä tietojasi koskevia toimintoja ja palauttaa arvon. Kokeile tätä:

// paikallinen isäntä: 8983 / solr / ipps / select? fl = Provider_Name,% 20Average_Total_Payments, price_category: if (min (0, sub (Average_Total_Payments, 5000)),% 22inexpensive% 22,% 22expensive% 22) & sisennys = päällä & q = * : * & rivit = 10 & wt = json

Esimerkissä käytetään joitain Solrin sisäänrakennettuja toimintoja luokittelemaan palveluntarjoajat kalliiksi tai edullisiksi keskimääräisten maksujen perusteella. panen hinta_luokka: jos (min (0, alempi (Keskimääräiset_maksut, 5000)), "halpa", "kallis") että fltai kenttäluettelo sekä kaksi muuta kenttää.

6. Kyselyjäsenet

defType antaa sinun valita yhden Solrin kyselyjäsentäjistä. Oletusarvoinen kyselyn jäsennin on todella hyvä tietyille koneen luomille kyselyille. Mutta Solrilla on myös Dismax- ja eDismax-jäsentimet, jotka ovat parempia normaaleille ihmisille: Voit napsauttaa yhtä niistä järjestelmänvalvojan kyselynäytön alareunassa tai lisätä defType = dismax kyselymerkkijonoon. Dismax-jäsennin tuottaa yleensä parempia tuloksia käyttäjän antamille kyselyille etsimällä "disjunktiomaksimi" tai kenttä, jolla on eniten vastaavuuksia, ja lisäämällä se pisteisiin.

7. Tehostaminen

Jos etsit Provider_State: AL ^ 5 TAI Provider_State: NC ^ 10, tulokset Pohjois-Carolinassa pisteytetään korkeammalla kuin Alabamassa. Voit tehdä tämän kyselyssäsi (q = ""). Tämä on tärkeä tapa manipuloida palautettuja tuloksia.

8. Ajanjaksot

Vaikka esimerkkitiedot eivät tue mitään ajanjaksohakuja, se muotoiltaisiin samalla tavalla timestamp_dt: [2016-12-31T17: 51: 44.000Z - 2017-02-20T18: 06: 44.000Z]. Solr tukee päivämäärätyyppikenttiä ja päivämäärätyyppihakuja ja suodatusta.

9. TF-IDF ja BM25

Alkuperäistä pisteytysmekanismia, jota Solr käytti (selvittääkseen, mitkä asiakirjat olivat merkityksellisiä hakutermillesi), kutsutaan TF-IDF: ksi "termien taajuus vastaan ​​asiakirjan käänteinen taajuus". Se palauttaa kuinka usein termi esiintyy kentässäsi tai asiakirjassa verrattuna siihen, kuinka usein termi esiintyy kokoelmassasi. Tämän algoritmin ongelmana on, että "Thrones-pelin" esiintyminen 100 kertaa 10-sivuisessa asiakirjassa verrattuna kymmenen kertaa 10-sivuisen asiakirjan kanssa ei tee dokumentista 10 kertaa merkityksellisempää. Se tekee sen lisää asiaankuuluva, mutta ei 10 kertaa enemmän merkityksellisiä.

BM25 tasoittaa tämän prosessin ja antaa asiakirjojen saavuttaa kyllästymispisteen, minkä jälkeen uusien tapahtumien vaikutuksia lievennetään. Kaikki uusimmat Solrin versiot käyttävät oletusarvoisesti BM25: tä.

10. debugQuery

Voit tarkistaa lisättävän debugQuery-järjestelmänvalvojan kyselykonsolista debugQuery = päällä Solr-kyselymerkkijonoon. Jos tarkastat tulokset, löydät tämän tuloksen:

Muun muassa näet sen käyttävän LuceneQParser-ohjelmaa (vakiomaisen kyselyn jäsentimen nimi) ja sen yläpuolella kuinka kukin tulos pisteytettiin. Näet itse BM25-algoritmin ja kuinka lisäykset vaikuttivat pisteytykseen. Jos yrität virittää hakua, tämä on erittäin arvokas työkalu!

Nämä Solrin kymmenen näkökohtaa auttavat minua varmasti, kun käytän Solria hakuun ja tulosteni virittämiseen.