Programování

10 tipů pro lepší vyhledávací dotazy v Apache Solr

Apache Solr je srdcem open source vyhledávač, ale je to mnohem víc než jen to. Jedná se o databázi NoSQL s transakční podporou. Jedná se o databázi dokumentů, která nabízí podporu SQL a provádí ji distribuovaným způsobem.

Dříve jsem vám ukázal, jak vytvořit a načíst kolekci do Solru; tuto sbírku můžete načíst nyní, pokud jste to dříve neudělali. (Úplné zveřejnění: Pracuji pro společnost Lucidworks, která zaměstnává mnoho klíčových přispěvatelů do projektu Solr.)

V tomto příspěvku vám ukážu dalších 10 dalších věcí, které s touto kolekcí můžete dělat:

1. Filtrovat dotazy

Zvažte tento dotaz:

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

Na první pohled vypadá tento dotaz podobně, jako kdybych to právě udělal q = Provider_State: NC. Filtrační dotazy však vracejí pouze ID a neovlivňují skóre. Filtrovací dotazy se také ukládají do mezipaměti. To je dobrý způsob, jak najít nejrelevantnější q = modrý semiš v oddělení: obuv naproti tomu oddělení: oblečení nebo oddělení: hudba.

2. Fazetování

Zkuste tento dotaz:

// localhost: 8983 / solr / ipps / select? facet = on &facet.field = Poskytovatel_Stát& facet.limit = -1 & indent = on & q = *: * & wt = json

V horní části se vrací následující:

ID

Fazetování vám dává mimo jiné počet vašich kategorií. Pokud implementujete maloobchodní web, tímto způsobem zadáváte kategorie a počty kategorií pro oddělení nebo jiné způsoby, jak rozdělit svůj inventář.

3. Fazetování rozsahu

Přidejte toto do řetězce 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]

Dostaneš:

Toto fazetování rozsahu může pomoci rozdělit číselné pole do kategorií rozsahů. Pokud pomáháte někomu najít notebook v rozmezí 2 000–3 000 $, je to pro vás. Místo toho můžete udělat podobný dotaz bez pevného kódování rozsahů: facet.range = Average_Total_Payments & facet.range.gap = 999,99 & facet.range.start = 2000 & facet.range.end = 10 000

4. DocValues

Ve svém schématu zkontrolujte, zda docValues atribut je vybrán pro pole, na kterých se tváříte. Tím se optimalizuje pole pro tyto druhy vyhledávání a uloží se do paměti v době dotazu, jak je ukázáno v tomto výňatku ze schématu.xml:

5. PseudoFields

Můžete provádět operace s vašimi daty a vrátit hodnotu. Zkuste to:

// 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) & indent = on & q = * : * & řádky = 10 & wt = json

Příklad používá některé z integrovaných funkcí společnosti Solr ke kategorizaci poskytovatelů jako drahých nebo levných na základě průměrných celkových plateb. Dal jsem price_category: if (min (0, sub (Average_Total_Payments, 5000)), "levná", "drahá") v fl, nebo seznam polí spolu s dalšími dvěma poli.

6. Analyzátory dotazů

defType vám umožní vybrat jeden z analyzátorů dotazů společnosti Solr. Výchozí analyzátor standardních dotazů je opravdu dobrý pro konkrétní strojově generované dotazy. Ale Solr má také analyzátory Dismax a eDismax, které jsou lepší pro normální lidi: Můžete kliknout na jeden z nich ve spodní části obrazovky dotazu správce nebo přidat defType = dismax do řetězce dotazu. Analyzátor Dismax obecně produkuje lepší výsledky pro dotazy zadané uživatelem tím, že najde „maximum disjunkce“ nebo pole s největším počtem shod a přidá jej do skóre.

7. Posilování

Pokud hledáte Provider_State: AL ^ 5 NEBO Provider_State: NC ^ 10, výsledky v Severní Karolíně budou hodnoceny vyšší než výsledky v Alabamě. Můžete to udělat ve svém dotazu (q = ""). Toto je důležitý způsob, jak manipulovat s vrácenými výsledky.

8. Časová období

I když ukázková data nepodporují žádné vyhledávání v časovém období, byla by formátována jako timestamp_dt: [2016-12-31T17: 51: 44.000Z DO 2017-02-20T18: 06: 44.000Z]. Solr podporuje pole typu data a vyhledávání a filtrování typu data.

9. TF-IDF a BM25

Původní bodovací mechanismus, který Solr použil (k určení, které dokumenty byly relevantní pro váš hledaný výraz), se nazývá TF-IDF, pro „četnost výrazů versus inverzní četnost dokumentů“. Vrátí, jak často se termín vyskytuje ve vašem poli nebo dokumentu, versus jak často se tento termín vyskytuje celkově ve vaší sbírce. Problém tohoto algoritmu spočívá v tom, že to, že se „Hra o trůny“ vyskytne 100krát v 10stránkovém dokumentu, oproti 10krát v 10stránkovém dokumentu, nedělá dokument 10krát relevantnějším. Dělá to více relevantní, ale ne 10krát více relevantní.

BM25 vyhlazuje tento proces a efektivně umožňuje dokumentům dosáhnout bodu nasycení, po kterém je dopad dalších výskytů zmírněn. Všechny nejnovější verze aplikace Solr standardně používají BM25.

10. debugQuery

V konzole Admin Query můžete zaškrtnout debugQuery, které chcete přidat debugQuery = zapnuto na řetězec dotazu Solr. Pokud zkontrolujete výsledky, najdete tento výstup:

Mimo jiné vidíte, že používá LuceneQParser (název standardního analyzátoru dotazů) a nad tím, jak byl zaznamenán každý výsledek. Vidíte samotný algoritmus BM25 a to, jak boosty ovlivnily skórování. Pokud se snažíte ladit vyhledávání, je to velmi cenný nástroj!

Těchto deset aspektů Solru mi určitě pomůže při používání Solru pro vyhledávání a ladění mých výsledků.