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:
IDFazetovanie 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 fl
alebo 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.