Programovanie

10 tipov na lepšie vyhľadávacie dotazy v aplikácii Apache Solr

Apache Solr je srdcom otvorený vyhľadávací modul, ale je to oveľa viac. Je to NoSQL databáza s podporou transakcií. Jedná sa o databázu dokumentov, ktorá ponúka podporu SQL a vykonáva ju distribuovaným spôsobom.

Predtým som vám ukázal, ako vytvoriť a načítať kolekciu do aplikácie Solr; túto zbierku môžete načítať teraz, ak ste tak ešte neurobili. (Úplné zverejnenie: Pracujem pre spoločnosť Lucidworks, ktorá zamestnáva mnohých kľúčových prispievateľov do projektu Solr.)

V tomto príspevku vám ukážem ďalších 10 ďalších vecí, ktoré môžete s touto zbierkou robiť:

1. Filtrovať dotazy

Zvážte tento dotaz:

// localhost: 8983 / solr / ipps / select? fq = stav poskytovateľa: NC & odsadenie = zapnuté & q = *: * & wt = json

Na prvý pohľad vyzerá tento dotaz podobne, ako keby som to urobil práve ja q = Provider_State: NC. Filtre však vracajú iba ID a neovplyvňujú skóre. Filtračné dotazy sa tiež ukladajú do medzipamäte. Toto je dobrý spôsob, ako nájsť najrelevantnejšie q = modrý semiš v oddelenie: obuv oproti oddelenie: odev alebo odbor: hudba.

2. Fazetovanie

Skúste tento dotaz:

// localhost: 8983 / solr / ipps / select? facet = on &facet.field = Poskytovateľ_štát& facet.limit = -1 & odsadenie = na & q = *: * & wt = json

V hornej časti je vrátené toto:

ID

Fazetovanie vám dáva (okrem iného) počet vašich kategórií. Ak implementujete maloobchodnú stránku, takto uvádzate kategórie a počty kategórií pre oddelenia alebo inými spôsobmi, ako rozdelíte svoj inventár.

3. Fazetovanie rozsahu

Pridajte toto do reťazca dotazu: 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 = [5 000 5999,99] & facet.interval.set = [6 000 6999,99] & facet.interval.set = [7000 7999,99] && facet.interval.set = [8000 8999,99] & facet.interval.set = [9000 , 10 000]

Získate:

Tento fazetovanie rozsahu môže pomôcť rozdeliť číselné pole na kategórie rozsahov. Ak niekomu pomáhate nájsť notebook v rozmedzí 2 000 - 3 000 dolárov, je to pre vás. Namiesto toho môžete urobiť podobný dopyt bez toho, aby ste naprogramovali rozsahy takto: facet.range = Average_Total_Payments & facet.range.gap = 999,99 & facet.range.start = 2000 & facet.range.end = 10 000

4. DocValues

Vo svojej schéme skontrolujte, či docValues pre polia, na ktoré sa zameriavate, je vybratý atribút. Toto optimalizuje pole pre tieto druhy vyhľadávania a šetrí pamäť v čase dotazu, ako je uvedené v tomto výňatku zo schémy.xml:

5. PseudoFields

Môžete robiť operácie s vašimi údajmi a vracať hodnotu. Skúste to:

// localhost: 8983 / solr / ipps / select? fl = Provider_Name,% 20Average_Total_Payments, price_category: if (min (0, sub (Average_Total_Payments, 5000)),% 22inexpensive% 22,% 22drahé% 22) & odsadenie = na & q = * : * & riadky = 10 & wt = json

Tento príklad využíva niektoré zo zabudovaných funkcií spoločnosti Solr na kategorizáciu poskytovateľov ako drahých alebo lacných na základe priemerných celkových platieb. Dal som price_category: if (min (0, sub (Average_Total_Payments, 5000)), "lacná", "drahá") v flalebo zoznam polí spolu s dvoma ďalšími poľami.

6. Analyzátory dotazov

defType vám umožní vybrať si jeden z analyzátorov dotazov spoločnosti Solr. Predvolený analyzátor štandardných dotazov je naozaj vhodný pre konkrétne strojovo generované dotazy. Ale spoločnosť Solr má aj analyzátory Dismax a eDismax, ktoré sú lepšie pre normálnych ľudí: Môžete kliknúť na jeden z nich v dolnej časti obrazovky dotazu správcu alebo pridať defType = dismax na váš reťazec dotazu. Analyzátor Dismax všeobecne produkuje lepšie výsledky pre dotazy zadané používateľom vyhľadaním „maxima disjunkcie“ alebo poľa s najväčším počtom zhôd a jeho pridaním k skóre.

7. Posilňovanie

Ak hľadáte Provider_State: AL ^ 5 ALEBO Provider_State: NC ^ 10, výsledky v Severnej Karolíne budú skórované vyššie ako výsledky v Alabame. Môžete to urobiť vo svojom dopyte (q = ""). Toto je dôležitý spôsob manipulácie s vrátenými výsledkami.

8. Obdobia

Aj keď vzorové údaje nepodporujú žiadne vyhľadávania v rozsahu dátumov, boli by naformátované v takom formáte timestamp_dt: [2016-12-31T17: 51: 44.000Z DO 2017-02-20T18: 06: 44.000Z]. Solr podporuje polia typu dátumu a vyhľadávanie a filtrovanie typu dátumu.

9. TF-IDF a BM25

Originálny bodovací mechanizmus, ktorý použil Solr (na určenie, ktoré dokumenty boli relevantné pre váš hľadaný výraz), sa nazýva TF-IDF, čo znamená „frekvencia výrazu verzus inverzná frekvencia dokumentu“. Vráti, ako často sa výraz vyskytuje vo vašom odbore alebo dokumente, oproti tomu, ako často sa tento výraz vyskytuje celkovo vo vašej zbierke. Problém tohto algoritmu spočíva v tom, že ak sa „Hra o tróny“ vyskytne 100-krát v 10-stranovom dokumente, oproti 10-krát v 10-stranovom dokumente, dokument nebude 10-krát relevantnejší. Robí to viac relevantné, ale nie 10 krát viac relevantné.

BM25 vyhladzuje tento proces a umožňuje dokumentom dosiahnuť bod nasýtenia, po ktorom sa zmierni dopad ďalších udalostí. Všetky najnovšie verzie systému Solr používajú v predvolenom nastavení BM25.

10. debugQuery

V konzole Admin Query môžete skontrolovať pridaný debugQuery debugQuery = zapnuté do reťazca dotazu Solr. Ak skontrolujete výsledky, nájdete tento výstup:

Okrem iného vidíte, že používa LuceneQParser (názov štandardného analyzátora dotazov) a okrem toho aj to, ako bol skórovaný každý výsledok. Vidíte samotný algoritmus BM25 a to, ako zosilnenie ovplyvnilo skórovanie. Ak sa snažíte ladiť svoje vyhľadávanie, je to veľmi cenný nástroj!

Týchto desať aspektov riešenia Solr mi určite pomôže pri používaní programu Solr na vyhľadávanie a ladenie mojich výsledkov.

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