PINQ – Dotazované datové sady. Fasetované vyhledávání

Zabudované fasetové vyhledávání Zabudováno do produktu

Fasetové vyhledávání zabudované do internetového obchodu – interní vyhledávání – funguje v mnoha ohledech rychle a nezatěžuje systém.

  • Zabudováno do produktu
  • Velmi rychle
  • Nenačte web
  • Je hlavní součástí API infobloků
  • Nevyžaduje redesign webu
  • Automaticky přeindexováno
Proč tak rychle?

Klientovi jsou okamžitě předloženy předem připravené výsledky vyhledávání – pro jakoukoli kombinaci parametrů – aspekt. Systém předem vypočítá fazety produktu - všechny možné průniky těchto vlastností ve filtru. Tyto hotové vyhledávací sady jsou pak vydávány klientům.

Proč se stránka nenačte?

V okamžiku vystavení výsledku klientovi neprobíhají žádné výpočty, protože výsledek je již připraven. Fazeta pro nový produkt je vytvořena ihned po přidání do prodejního katalogu. Vyhledávání je automaticky přeindexováno na základě nových produktů a nových vlastností.

Výhody pro klienty

Výhody fasetového vyhledávání Váš klient najde produkt velmi rychle, snadno si pohraje s nastavením filtru. Klient nečeká a výsledky má okamžitě. Rychlost vyhledávání nezávisí na počtu položek v katalogu.


Inteligentní filtr 2.0

Zákazník rychle najde produkt

Váš klient najde produkt velmi rychle díky důslednému zužování vyhledávacího dotazu. A na každém kroku okamžitě dostává výsledky – seznam produktů na vyžádání. Nemusí čekat na vyřízení jeho žádosti. Protože systém předem spočítal všechny možné možnosti a jednoduše vydává polotovary. Internetový obchod postupně ve výsledku zobrazuje stále méně produktů. Tyto produkty se stále více přibližují požadavku kupujícího.

Interaktivita a mnohorozměrnost

Výběr produktu pro kupujícího je jako hra. Klient přetáhne parametry (cena, hmotnost), přepne vlastnosti (barva, velikost), nastaví další podmínky (značka, materiál, chuť atd.) – a systém okamžitě přeuspořádá výsledky. V tomto případě může být nastavitelných parametrů tolik, kolik chcete - jejich počet neovlivňuje rychlost generování výsledku.

Pohodlí a vstřícnost

Díky fasetové navigaci si v obchodě snadno vybere produkt i nezkušený uživatel. Manipulace s vyhledávacími nástroji je velmi pohodlná. Systém navíc kupujícímu vyzve všechny parametry, podle kterých si může vybrat produkt. Obchod jakoby předvádí klientovi hlavní vlastnosti produktu.

Klient nečeká na vyřízení požadavku!
Váš klient si například koupí fotoaparát. Zpočátku udává v chytrém filtru pouze 3 parametry: cenu, značku, velikost. Jeho fazeta zahrnuje 3 průsečíky, výsledků hledání je hodně, ale klient je dostává okamžitě. Klient si nastaví váhu – potřebuje odlehčenou vychytávku. Systém mu okamžitě, bez prodlení, dá menší seznam zboží. Klient nastaví velikost obrazovky a poté specifikuje požadovanou funkcionalitu. Před ním je požadované zboží.


Rychlost vyhledávání

Na rychlosti vyhledávání záleží Rychlost vyhledávání ovlivňuje počet uskutečněných nákupů

Nic nerozčiluje zákazníka víc než problém najít produkty na vašem webu. Klient odejde do jiných obchodů, pokud bude hledat příliš dlouho. I když váš obchod obsahuje velký výběr produkty a mnoho nástrojů pro jejich filtrování. Klient nemusí obdržet výsledky z požadavku.


Video tutoriál: Proč fasetové vyhledávání výrazně zrychluje inteligentní filtr
Použití „fazety“ urychlí vyhledávání v obchodě o řád. Rychlost v tomto případě nezávisí na počtu prvků v adresáři.

Proč je vyhledávání tak pomalé?
Hledání produktu ve výloze může trvat výrazně déle než normální načítání stránky. Zvláště pokud je na prodejně velké množství produktů a vlastnosti těchto produktů. Vyhledávací dotaz v mnoha ohledech vytváří spoustu databázových volání a výrazně zatěžuje web. Pokud je klientů a požadavků hodně, vyhledávání se výrazně zpomaluje.

Rychlost práce je impozantní! Výsledky testů pro verzi 15.0 produktu na třech kategoriích katalogů obsahujících 500 tisíc položek ukázaly, že ve srovnání s předchozími verzemi:
  • Inteligentní součást filtru – 15krát rychlejší!
  • Katalogová komponenta – 5x rychlejší!
Vyhledávací inteligence zůstává konstantní!
Rychle i bez „fazety“! Produkt neustále pracuje na zrychlení samotných katalogových komponent. Služba „Site Speed“ vykazuje výrazné zvýšení rychlosti od verze k verzi!

Rekonstrukce

Provádí se neustálá rekonstrukce výsledků indexování a vyhledávání. Algoritmus indexování obsahu je přepracován a zrychlen. Zlepšila se kvalita prezentace výsledků vyhledávání – zejména se snížil „šum“. Vývojáři plánují zobrazovat personalizovaná data pro aktuálního klienta ve výsledcích vyhledávání.

Pro vývojáře: API Transparency


Předchozí pohled

"Facet" je transparentní pro API "Faceta" zabudovaná do produktu je transparentní pro API. Je hlavní součástí API infobloků. Proto jeho použití nevyžaduje další úsilí pro vývojáře. Také není potřeba předělávat weby.
  • Zrychlení metody CIBlockElement::GetList
  • Plná integrace s inteligentním filtrem
GetList nyní funguje rychleji, protože k fungování automaticky připojuje „fazetu“. Na D7 je také samostatné API.

Plná integrace s inteligentním filtrem

Nyní, když provádíte nastavení v administrativní části, můžete pro vlastnosti produktu nejen uvést aktivitu - zda se zúčastnit nebo ne v inteligentním filtru. Předáním vlastnosti do inteligentního filtru si můžete okamžitě vybrat, jak je zobrazit. V jaké formě se má nemovitost klientům zobrazovat: tlačítka, velikosti, posuvníky, rozevírací seznamy, seznamy s výběrem barev atd.



Zobrazit vlastnost v inteligentním filtru

Lze přizpůsobit!

Chytrý filtr nyní vypadá krásnější. Vývojáři si mohou snadno upravit a dále upravit jeho vzhled.

Rychle jsme se podívali na instalaci a základní syntaxi PINQ, portu LINQ na PHP. V tomto článku se podíváme na to, jak pomocí PINQ simulovat funkci fasetovaného vyhledávání v MySQL.

V tomto článku se nebudeme zabývat všemi aspekty fasetovaného vyhledávání. Zájemci si mohou vyhledat vhodné informace na internetu.

Typické fasetové vyhledávání funguje takto:

  • Uživatel zadá klíčové slovo nebo několik klíčových slov pro vyhledávání. Například „router“ pro vyhledávání produktů, ve kterých se slovo „router“ vyskytuje v popisu, klíčových slovech, názvu kategorie, značkách atd.
  • Stránka vrátí seznam produktů, které splňují tato kritéria.
  • Stránka poskytuje několik odkazů pro přizpůsobení hledaných výrazů. Může vám například umožnit specifikovat konkrétní výrobce routerů nebo nastavit cenové rozpětí nebo jiné funkce.
  • Uživatel může pokračovat v zadávání dalších vyhledávacích kritérií, aby získal soubor dat, který ho zajímá.

Fasetové vyhledávání je poměrně populární a výkonný nástroj, který lze vidět téměř na každém webu elektronického obchodu.

Bohužel fasetové vyhledávání není zabudováno do MySQL. Co bychom tedy měli dělat, pokud stále používáme MySQL, ale chceme dát uživateli tuto příležitost?

S PINQ, který má podobný, výkonný a jednoduchý přístup, můžeme dosáhnout stejného chování, jako bychom používali jiné databázové stroje.

Rozšíření dema z prvního dílu

Poznámka: veškerý kód z této části az první části lze nalézt v úložišti.

V tomto článku rozšíříme ukázku z 1. části s výrazným vylepšením v podobě vyhledávání podle faset.

Začněme s index.php a přidejte k němu následující řádky:

$app->get("demo2", function () use ($app) ( global $demo; $test2 = new pinqDemo\Demo($app); return $test2->test2($app, $demo->test1) ($app)); )); $app->get("demo2/facet/(key)/(value)", funkce ($key, $value) use ($app) ( global $demo; $test3 = new pinqDemo\Demo($app); return $test3->test3($app, $demo->test1($app), $key, $value); ));

První trasa nás zavede na stránku, kde se zobrazí všechny položky, které odpovídají vyhledávání podle klíčové slovo. Aby byl příklad jednoduchý, vybereme všechny knihy z tabulky kniha_kniha. Zobrazí také výslednou datovou sadu a sadu odkazů pro specifikaci vyhledávacích kritérií.

V reálných aplikacích se po kliknutí na takové odkazy všechny fasetové filtry přizpůsobí hraničním hodnotám výsledné datové sady. Uživatel tak bude moci postupně přidávat nové podmínky vyhledávání, například nejprve vybrat výrobce, poté zadat cenové rozpětí atd.

Ale v tomto příkladu nebudeme toto chování implementovat - všechny filtry budou odrážet hraniční hodnoty původní datové sady. Toto je první omezení a první kandidát na vylepšení v našem demu.

Jak můžete vidět v kódu výše, skutečné funkce jsou umístěny v jiném souboru s názvem pinqDemo.php. Pojďme se podívat na odpovídající kód, který poskytuje funkci fasetovaného vyhledávání.

Třída aspektů

Prvním krokem je vytvoření třídy, která reprezentuje aspekt. Obecně by aspekt měl obsahovat několik vlastností:

  • Data, na kterých pracuje ($data)
  • Klíč, kterým se seskupení provádí ($key)
  • Typ klíče ($type). Může být jedna z následujících:
    • zadejte celý řetězec pro přesnou shodu
    • označte část řetězce (obvykle počáteční) pro vyhledávání podle vzoru
    • označte rozsah hodnot pro seskupení podle rozsahu
  • je-li typem klíče rozsah hodnot, musíte definovat hodnotový krok, abyste určili dolní a horní hranici rozsahu; nebo pokud je typ součástí řetězce, musíte určit, kolik prvních písmen bude použito pro seskupení (rozsah $)

Seskupování je nejkritičtější částí aspektu. Všechny agregované informace, které může být aspekt schopen vrátit, závisí na kritériích seskupení. Nejpoužívanějšími vyhledávacími kritérii jsou obvykle „Full String“, „Part of String“ nebo „Range of Values“.

Jmenný prostor classFacet ( použijte Pinq\ITraversable, Pinq\Traversable; class Facet ( public $data; // Původní datová sada veřejný $klíč; // pole, podle kterého se má seskupit veřejný $typ; // F: celý řádek; S: počáteční řetězce ; R: rozsah; veřejný $rozsah; // hraje roli pouze pokud $type != F ... veřejná funkce getFacet() ( $filter = ""; if ($this->type == "F") / / celý řádek ( ... ) elseif ($this->type == "S") // začátek řádku ( ... ) elseif ($this->type == "R") // rozsah hodnot ​​( $ filter = $this->data ->groupBy(function($row) ( return floor($row[$this->key] / $this->range) * $this->range; )) -> select(function (ITtraversable $data) ( return ["key" => $data->last()[$this->key], "count" => $data->count()]; )); ) return $filtr; )))

Hlavní funkcí této třídy je vrátit filtrovanou datovou sadu na základě původní datové sady a vlastností aspektů. Z kódu je zřejmé, že pro různé typy účtů, které používají různé cesty seskupování dat. Ve výše uvedeném kódu jsme ukázali, jak může kód vypadat, pokud data seskupíme podle rozsahu hodnot v krocích zadaných v $rozsah .

Nastavení aspektů a zobrazení zdrojových dat

Veřejná funkce test2($app, $data) ( $facet = $this->getFacet($data); return $app["twig"]->render("demo2.html.twig", array("facet" = > $facet, "data" => $data)); ) soukromá funkce getFacet($originalData) ( $facet = array(); $data = \Pinq\Traversable::from($originalData); // 3 příklady vytvoření různé objekty aspektů a vrátí aspekty $filter1 = new \classFacet\Facet($data, "autor", "F"); $filter2 = new \classFacet\Facet($data, "title", "S", 6 ); $filter3 = new \classFacet\Facet($data, "cena", "R", 10); $facet[$filter1->key] = $filter1->getFacet(); $facet[$filter2-> klíč ] = $filter2->getFacet(); $facet[$filter3->key] = $filter3->getFacet(); return $facet; )

V metodě getFacet() provádíme následující:

  • Převeďte původní data na objekt Pinq\Traversable pro další zpracování
  • Vytváříme tři aspekty. Aspekt 'autor' se seskupí podle pole autora a implementuje seskupení podle celého řádku; aspekt 'název' - podle pole názvu se seskupením podle části řádku (po prvních 6 znacích); aspekt 'cena' - podle pole ceny se seskupením podle rozsahu (v krocích po 10)
  • Nakonec extrahujeme aspekty a vrátíme je do funkce test2, aby mohly být výstupem do šablony pro zobrazení
Výstupní aspekty a filtrovaná data

Ve většině případů se filtry zobrazí jako čára a dovedou vás k zobrazení filtrovaného výsledku.

Již jsme vytvořili trasu ("demo2/facet/(key)/(value)") k zobrazení výsledků vyhledávání a filtrování odkazů.

Trasa má dva parametry v závislosti na klíči, který je filtrován, a hodnotě tohoto klíče. Funkce test3, která je svázána s touto cestou, je zobrazena níže:

Test veřejné funkce3($app, $originalData, $key, $value) ( ​​​​$data = \Pinq\Traversable::from($originalData); $facet = $this->getFacet($data); $filter = null; if ($key == "autor") ( $filter = $data ->where(function($row) use ($value) (​return $row["author"] == $value; )) ->orderByAscending( function($row) use ($key) ( return $row["price"]; )) ; ) elseif ($key == "price") ( ... ) else //$key== title ( .. . ) return $app["twig"]->render("demo2.html.twig", array("facet" => $facet, "data" => $filter)); )

V podstatě v závislosti na klíči aplikujeme filtrování (anonymní funkce v příkazu where) podle předané hodnoty a získáme následující sadu filtrovaných dat. Můžeme také nastavit pořadí filtrování dat.

Nakonec zobrazíme nezpracovaná data (spolu s filtry) v šabloně. Tato cesta používá stejný vzor, ​​jaký jsme použili v "demo2".

Panel vyhledávání

    (% pro k, v ve fazetě %)
  • ((k|velká písmena))
    • (% pro vv v %)
    • ((vv.count))((vv.key))
    • (%endfor%)
    (%endfor%)

Musíme si pamatovat, že aspekty generované naší aplikací jsou vnořená pole. Na první úrovni se jedná o pole všech aspektů a v našem případě jsou tři (u autora, názvu, ceny).

Každý aspekt má pole klíč–hodnota, takže jej můžeme iterovat pomocí běžných metod.

Všimněte si, jak vytváříme adresy URL pro naše odkazy. Jako parametry pro cestu ("demo2/facet/(key)/(value)" používáme jak klíč vnější smyčky (k), tak klíč vnitřní smyčky (vv.key). Pro zobrazení v šabloně se používá velikost polí (vv.count).

První obrázek ukazuje původní soubor dat a druhý obrázek je filtrován podle cenového rozpětí od 0 do 10 $ a seřazený podle autora.

Skvělé, dokázali jsme v naší aplikaci simulovat fasetové vyhledávání!

Před uzavřením tohoto článku se musíme naposledy podívat na náš příklad a určit, co lze zlepšit a jaká máme omezení.

Možná vylepšení

Obecně se jedná o velmi základní příklad. Právě jsme prošli základní syntaxi a koncepty a implementovali je jako pracovní příklad. Jak již bylo řečeno, máme několik oblastí, které by mohly být vylepšeny pro větší flexibilitu.

Potřebujeme implementovat „překryvná“ vyhledávací kritéria, protože aktuální příklad nás omezuje na možnost použít filtrování vyhledávání pouze na původní soubor dat; nemůžeme použít fasetové vyhledávání na již filtrovaný výsledek. To je největší zlepšení, jaké si dokážu představit.

Omezení

Hledání faset implementované v tomto článku má vážná omezení (která se mohou týkat i jiných implementací hledání faset):

Pokaždé načítáme data z MySQL

Tato aplikace používá rámec Silex. Jako každý rámec pro jeden vstupní bod, jako je Silex, Symfony, Laravel, je jeho soubor index.php (nebo app.php) volán pokaždé, když je analyzována trasa a jsou vykonávány funkce ovladače.

Pokud se podíváte na kód v našem index.php, všimnete si, že následující řádek kódu:

$demo = new pinqDemo\Demo($app);

je voláno při každém vykreslení stránky aplikace, což znamená, že se pokaždé provedou následující řádky kódu:

Ukázka třídy ( private $books = ""; veřejná funkce __construct($app) ( $sql = "vyberte * z book_book order by id"; $this->books = $app["db"]->fetchAll($sql );)

Bude lepší, když nebudeme používat framework? Navzdory skutečnosti, že vývoj aplikací bez rámců není dobrý nápad, mohu říci, že narazíme na stejné problémy: data (a stav) se neukládají mezi různými HTTP požadavky. To je základní charakteristika HTTP. Tomu se lze vyhnout použitím mechanismů ukládání do mezipaměti.

Pomocí aspektů jsme ušetřili několik SQL dotazů. Namísto předání jednoho výběrového dotazu k načtení dat a tří seskupení dotazů s odpovídajícími klauzulemi where jsme spustili pouze jeden dotaz where a použili PINQ k získání agregovaných informací.

Závěr

V této části jsme implementovali možnost fasetového prohledávání sbírky knih. Jak jsem řekl, toto je jen malý příklad, který má prostor pro zlepšení a který má řadu omezení.

( "query": ( "and": [ ( "terms": ("country": ["be", "fr"]) ), ( "terms": ("category": ["knihy", "filmy" ""])))]))

Pro čítače můžeme použít vestavěné agregace z Elasticsearch. Každý z těchto dvou aspektů je uložen jako jedno pole v indexu, takže můžeme použít agregaci termínů v každém z těchto polí. Agregace vrátí počítadlo pro hodnotu tohoto pole.

( "query": ( "and": [ ( "terms": ("country": ["be", "fr"]) ), ( "terms": ("category": ["knihy", "filmy" " "]) ) ]), "agregace": ( "země": ( "termíny": ("pole": "země")), "kategorie": ( "termíny": ("pole": "kategorie" )))))

Pokud spustíte tento dotaz, všimnete si, že čítače jsou zakázány. Dvě nevybrané země, Portugalsko a Brazílie, mají počítadlo 0. Ačkoli existují skutečné výsledky, pokud je chceme vybrat (kvůli vnitřnímu okraji OR). K tomu dochází, protože ve výchozím nastavení Elasticsearch provádí své agregace na sadě výsledků. To znamená, že pokud vyberete Francii, filtry jiné země budou mít skóre 0, protože sada výsledků obsahuje pouze položky z Francie.

Abychom to napravili, musíme říct Elasticsearch, aby provedl agregaci celé datové sady a ignoroval dotaz. Můžeme to udělat tím, že definujeme naše klastry jako globální.

( "query": ( "and": [ ( "terms": ("country": ["be", "fr"]) ), ( "terms": ("category": ["knihy", "filmy" " "]) ) ]), "agregace": ( "all_products": ( "global": (), "agregations": ( "country": ( "terms": ("field": "country")), " category": ( "terms": ("field": "category") ) ) ) ) )

Kdybychom to udělali, naše čítače by byly vždy stejné, protože by vždy počítaly s celým souborem dat, bez ohledu na naše filtry. Naše jednotky musí být trochu složitější, aby to fungovalo, musíme k nim přidat filtry. Každá agregace se musí spoléhat na sadu dat se všemi použitými filtry kromě vlastního. Agregace podle účtu ve Francii tedy počítá se sadou dat s použitým filtrem kategorií, ale ne s filtrem země:

( "query": ( "and": [ ( "terms": ("country": ["be", "fr"]) ), ( "terms": ("category": ["knihy", "filmy" " "]) ) ]), "agregace": ( "all_products": ( "global": (), "agregations": ( "country": ( "filtr": ( "and": [ ( "terms": ( "category": ["knihy","filmy"]) ) ] ), "agregace": ( "filtrované_země": ( "terms": ("pole": "země")) ) ), "kategorie": ( "filtr": ( "and": [ ( "terms": ("country": ["be","fr"]) ]), "agregations": ( "filtered_categories": ( "terms": ( "pole": "kategorie") ) ) ) ) ) ) )

( "vzalo": 153, "timed_out": false, "_shards": ( "celkem": 5, "úspěšné": 5, "neúspěšné": 0), "shody": ( "celkem": 3, "max_skóre ": 0, "hits": ["..."]), "agregations": ( "all_products": ( "doc_count": 21, "filtered category": ( "doc_count": 13, "categories": ( "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ ( "key": "filmy", "doc_count": 6 ), ( "key": "music", "doc_count": 4), ( "key": "books", "doc_count": 3 ) ] ) ), "filtered_country": ( "doc_count": 15, "country": ( "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ ( "key": "fr", "doc_count": 6 ), ( "key": "br", "doc_count": 4 ), ( "key": "be", "doc_count": 3), ( "key": "pt", "doc_count": 2 ) ] ) ) ) ))

Rámec Yii2 $terms = QueryHelper::terms("categories.name" , "moje kategorie" ) ; $nested = QueryHelper:: vnořeno ("string_facet" , QueryHelper:: filtr ([ QueryHelper:: termín ("string_facet.facet_name" , [ "value" => $id , "boost" => 1 ]) , QueryHelper:: termín ("string_facet.facet_value" , ​​​​[ "value" => $hodnota , "boost" => 1 ] ) , ] ) ); $filter = QueryHelper::should ($vnořený) ;

V dnešní lekci se pokusíme znovu vytvořit imitaci fasetovaného vyhledávání pomocí Javascriptu. Předpokládám, že pokud čtete tento tutoriál, už víte, co je to fasetové vyhledávání, jinak si ho vygooglujte nebo se podívejte na Amazon nebo moje demo.

Nejprve potřebujeme knihovnu github.com/eikes/facetedsearch. Stáhněte si jej a připojte soubor facetedsearch.js k našemu projektu. Dále budeme potřebovat knihovny jQuery a Underscore.

Upozornění: Chápu, že JQ už není dort, ale používám ho jako známý syntaktický cukr, můžete ho přepsat pro vám známější knihovny nebo ve vanilkovém JS.

Nejprve si tedy udělejme jednoduché označení s připojenými závislostmi:

Dokument // Zde zobrazíme fasetové filtry // A zde budou naše prvky

Nyní musíme popsat nastavení naší aplikace a vytvořit šablonu pro zobrazení prvků pole, které budeme třídit pomocí faset:

$(function())( var item_template = // Popište šablonu "" + " " class="img-responsive">" + ", " + "

" + "" + ", " + ", " + "

" + "

" + ""; nastavení = ( items: example_items, facets: ( // Určete kategorie faset "category" : "Jaká kategorie", "kontinent" : "Který kontinent", "language" : "Programovací jazyk"), resultSelector: "#results", // Element DOM, kde zobrazujeme výsledky facetSelector: "#facets", // Element DOM pro aspekty resultTemplate: item_template, paginationCount: 8, // Počet prvků na stránce orderByOptions: ("firstname": " Jméno ", "příjmení": "Příjmení", "kategorie": "Kategorie", "RANDOM": "Náhodné"), facetSortOption: ("kontinent": ["Severní Amerika", "Jižní Amerika"]) ) $. facetelize(nastavení); ));

Ve skutečnosti vytvořte samotné pole JSON s prvky, které se mají zobrazit v našem fasetovém vyhledávání v JS:

Var items = [ ( "křestní jméno": "Mary", "lastname": "Smith", "imageURL": "http://lorempixel.com/150/150/cats/2", "description": "Sed Ea Amet. Stet Voluptua. Nonumy Magna Takimata ", "kategorie": "Myš", "jazyk": ["Smalltalk", "XSLT"], "kontinent": "Afrika" ​​), ( "křestní jméno": "Patricia" ", "lastname": "Johnson", "imageURL": "http://lorempixel.com/150/150/cats/3", "description": "Ut Takimata Sit Aliquyam Labore Aliquyam Sit Sit Lorem Amet. Ipsum Rebum ." , "kategorie": "Lev", "kontinent": "Severní Amerika", ... ];

Toto pole bych vložil do samostatného JS souboru, který by se generoval dynamicky, například z databáze.

To je vše, získáváme fasetové vyhledávání v JavaScriptu a můžeme jej přizpůsobit. Dále poskytuji přeloženou dokumentaci knihovny, kde můžete vidět spouštěče, které potřebujete.

Funkce dokumentace

Do jmenného prostoru jQuery jsou exportovány dvě funkce.

facetelize Slouží k inicializaci vyhledávání tváří s daným nastavením.

facetUpdate Lze použít, pokud chcete externě změnit stav vyhledávání faset.

Nastavení objektu

items: Pole položek, které budou v procesu filtrovány a seřazeny.

fasety: Objekt, jehož klíče odpovídají klíčům a hodnotám prvků, je záhlavím této fasety. Položky budou filtrovány podle toho, jakou hodnotu mají pro tyto klíče.

orderByOptions: Podobné jako fasety, s tím rozdílem, že tyto páry klíč–hodnota se používají pouze pro řazení. Když je aktivována klávesa RANDOM, výsledky mohou být náhodně uspořádány.

facetSelector: Toto je selektor, který se používá k nalezení uzlu DOM, ze kterého lze vybrat filtry faset.

resultSelector: Toto je selektor, který se používá k nalezení uzlu DOM, kde se zobrazují výsledky.

resultTemplate: Řetězec, který používá modul šablony Underscore k vykreslení každého prvku z pole položek. Ke každému prvku jsou přidány následující atributy, které lze také použít v šabloně: batchItemNr, batchItemCount a totalItemCount.

stav: Tento objekt ukládá aktuální filtry, řazení: currentResult a další. Pro jejich přednastavení můžete zadat řetězec orderBy nebo objekt filtrů.

enablePagination: Boolean pro povolení stránkování a tlačítka „načíst více“, výchozí hodnota je true .

paginationCount: Pokud je povolen paginator, nastaví počet prvků na stránku, výchozí hodnota je 50.

facetSortOption: Pomocí této funkce můžete změnit pořadí prvků fasety. Převezme objekt, jehož klíče odpovídají názvům a hodnotám faset, do pole hodnot faset, které lze uspořádat v pořadí, v jakém je chcete mít. Tento příklad seřadí kontinenty v jiném pořadí a přidá položky, které nejsou zahrnuty v poli, v abecedním pořadí:

FacetSortOption: ("kontinent": ["Severní Amerika", "Jižní Amerika"])

Existuje několik dalších šablon, podívejte se prosím zdroj facetedsearch.js, abyste viděli všechny dostupné možnosti šablony.

Události

Můžete se vázat na některé události, které by měly posílat upozornění, když došlo k nějaké akci. K tomu používáme systém událostí jquery:

facetuicreated: Tuto funkci můžete svázat s prvkem DOM settings.facetSelector, který by měl být upozorněn na vytvoření uživatelského rozhraní.

facetedsearchresultupdate: Tuto funkci můžete svázat s prvkem DOM settings.resultSelector, abyste byli informováni o výsledcích aktualizace.

facetedsearchfacetclick: Tato událost se spustí, když se klepne na fasetu a spustí se na prvku settings.facetSelector. Který obdrží id fazety jako argument.

facetedsearchorderby: Tato událost se spustí, když se klikne na prvek řazení na prvek settings.facetSelector. Jako argument bere pořadí ID.

$(settings.resultSelector).bind("facetedsearchresultupdate", function())( // něco udělejte, možná ));

Moderní lidé se snaží trávit stále méně času nakupováním. Pomalé produktové katalogy odvádějí zákazníky, obchod přichází o zákazníky a část zisku. Zatraktivněte svůj internetový obchod fasetovanou technologií Faceted - tzn. předdefinované. Vyhledávání. Vytvářejte fasetové rejstříky a výrazně urychlete vyhledávání produktů i práci celého katalogu.

Poznámka: Mechanismus fasetového vyhledávání je dostupný od verze 15.0.1 modulu Informační bloky a je integrován s komponentou. Komponenta je programový kód navržený ve vizuálním prostředí, který plní specifickou funkci modulu pro zobrazování dat na veřejnosti. část. Tento blok kódu můžeme vložit do webových stránek bez přímého psaní kódu. Inteligentní filtr Komponenta připraví filtr pro výběr z informačního bloku a zobrazí formulář filtru pro filtrování prvků. Komponenta musí být připojena před komponentou pro zobrazení prvků katalogu, jinak nebude seznam prvků filtrován. Komponenta je standardní, je součástí distribuce modulu a obsahuje tři šablony: .default , visual_horizontal a visual_vertical . (Poslední dvě šablony nejsou podporovány, zůstávají kvůli zachování kompatibility.)

Ve vizuálním editoru je komponenta umístěna podél cesty Obsah > Katalog > Inteligentní filtr.

Komponenta patří do modulu Informační bloky.

Další informace o fasetovém vyhledávání

Podívejme se na příklad:

Jdeme do internetového obchodu a ve filtru vybereme, že potřebujeme červené tričko:

  • Bez fasetovaného vyhledávání by filtr začal procházet celým seznamem produktů, aby odpovídal produktu „Tričko“ s barevnou vlastností „Červená“, což by při velkém počtu produktů zabralo spoustu času;
  • Nastavíte-li fasetové vyhledávání, pak se vytvoří hotové vyhledávací sady produktů pro určitou hodnotu vlastnosti (fasetové indexy), tzn. možnosti pro případné požadavky Například červené tričko, všechny černé bavlněné výrobky, šaty velikosti XS atd. v chytrém filtru se spočítají předem a výsledek se okamžitě zobrazí. Tento typ vyhledávání produktů je mnohem rychlejší.

Pojďme vytvořit fasetové indexy v několika jednoduchých krocích:

Je nutné indexy faset znovu vytvořit?

Fasetové indexy se znovu vytvářejí automaticky nebo je musíte znovu vytvořit ručně, v závislosti na provedených akcích:

Automaticky Přidány nové nebo upravené stávající produkty.
nevytvářejte nové vlastnosti.
Ručně Systém vás na to upozorní zprávou v horní části stránek
administrativní úsek.
Přidány nové nebo upravené sekce katalogu.
Při přidávání nové nebo odebírání vlastnosti z chytrého filtru.
Při vykládce zboží např. z 1C, pokud zboží vytváří nové vlastnosti.

Fasetové vyhledávání zlepšuje výkon katalogu produktů. K jeho použití potřebujete:

  • Vytvářejte fasetové indexy pro produktový katalog;
  • Sledujte upozornění na nutnost ručně znovu vytvořit indexy.
  • Publikace na dané téma