Fasettsökning. PINQ - Interrogated datasets. Fasettsökning. Ställ in aspekter och visa initiala data

( "query": ( "och": [ ( "terms": ("land": ["be", "fr")) ), ( "terms": ("category": ["böcker", "filmer") "]) ) ] ) )

För räknare kan vi använda de inbyggda aggregaten från Elasticsearch. Var och en av de två aspekterna lagras som ett fält i indexet, så vi kan använda termaggregering i vart och ett av dessa fält. Aggregeringen returnerar en räknare för värdet på detta fält.

( "query": ( "och": [ ( "terms": ("land": ["be", "fr")) ), ( "terms": ("category": ["böcker", "filmer") "]) ) ] ), "aggregations": ( "länder": ( "terms": ("fält": "land") ), "kategorier": ( "termer": ("fält": "kategori") ) ) )

Om du skulle köra den här frågan skulle du märka att räknarna är inaktiverade. De två icke-utvalda länderna, Portugal och Brasilien, har ett antal 0. Även om det finns faktiska resultat om vi vill välja dem (på grund av ELLER-kanten). Detta beror på att Elasticsearch som standard utför sina aggregationer på resultatuppsättningen. Det betyder att om du väljer Frankrike så kommer de andra landsfiltren att få poängen 0 eftersom resultatuppsättningen bara innehåller element från Frankrike.

För att fixa detta måste vi instruera Elasticsearch att utföra aggregeringen på hela datamängden och ignorera frågan. Vi kan göra detta genom att definiera våra kluster som globala.

( "query": ( "och": [ ( "terms": ("land": ["be", "fr")) ), ( "terms": ("category": ["böcker", "filmer") "]) ) ] ), "aggregations": ( "all_products": ( "global": (), "aggregations": ( "countries": ( "terms": ("fält": "land") ), " kategorier": ( "termer": ("fält": "kategori") ) ) ) ) )

Om vi ​​bara gjorde det skulle våra räknare alltid vara desamma eftersom de alltid skulle räkna med hela datamängden, oavsett våra filter. Våra aggregat måste bli lite mer komplexa, för att detta ska fungera måste vi lägga till filter till dem. Varje aggregering måste räknas med en datauppsättning med alla filter tillämpade utom sina egna. Så aggregeringen för konto i Frankrike räknas på datamängden med kategorifiltret tillämpat, men inte landsfiltret:

( "query": ( "och": [ ( "terms": ("land": ["be", "fr")) ), ( "terms": ("category": ["böcker", "filmer") "]) ) ] ), "aggregations": ( "all_products": ( "global": (), "aggregations": ( "countries": ( "filter": ( "and": [ ( "terms": () "category": ["böcker","filmer"]) ) ] ), "aggregations": ( "filtered_countries": ( "terms": ("fält": "land") ) ), "kategorier": ( "filter": ( "och": [ ( "terms": ("land": ["be","fr"]) ) ] ), "aggregations": ( "filtered_categories": ( "terms": (" field": "kategori") ) ) ) ) ) ) )

( "tog": 153, "timed_out": false, "_shards": ( "total": 5, "successful": 5, "failed": 0 ), "träffar": ( "total": 3, "max_score ": 0, "träffar": ["..."] ), "aggregations": ( "alla_produkter": ( "doc_count": 21, "filtrerade kategorier": ( "doc_count": 13, "categories": ( "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ ( "key": "movies", "doc_count": 6 ), ( "key": "music", "doc_count": 4 ), ( "key": "books", "doc_count": 3 ) ] ) ), "filtred_countries": ( "doc_count": 15, "countries": ( "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 ) ] ) ) ) ) )

yii2 ramverk

$terms = QueryHelper::terms("categories.name" , "min kategori" ) ; $nested = QueryHelper:: kapslad ("string_facet" , QueryHelper:: filter ([ QueryHelper:: term ("string_facet.facet_name" , [ "value" => $id , "boost" => 1 ] ), QueryHelper:: term ("string_facet.facet_value", ​​[ "value" => $värde, "boost" => 1 ] ), ] ) ); $filter = QueryHelper:: should ($nested ) ;

En modern person försöker lägga mindre och mindre tid på inköp. Långsamma produktkataloger stöter bort kunder, butiken tappar kunder och en del av vinsten. Gör din webbutik mer attraktiv med teknik fasetterad Facetterad - d.v.s. fördefinierad. Sök. Skapa facettindex och avsevärt påskynda sökningen efter produkter och arbetet med hela katalogen.

Notera: Den facetterade sökmotorn är tillgänglig från version 15.0.1 av modulen Informationsblock och integrerad med komponent Komponent- detta är en programkod designad i ett visuellt skal som utför en specifik funktion för vilken modul som helst för att visa data i den offentliga delen. Vi kan bädda in detta kodblock på webbplatssidor utan att skriva kod direkt. smart filter Komponenten förbereder ett filter för att välja från infoblocket och visar filterformuläret för att filtrera element. Komponenten måste anslutas före katalogobjektets utmatningskomponent, annars kommer listan med artiklar inte att filtreras. Komponenten är standard, ingår i moduldistributionssatsen och innehåller tre mallar: .standard, visuell_horisontell och visual_vertical. (De sista två mönstren stöds inte och lämnas av kompatibilitetsskäl.)

I den visuella redigeraren är komponenten placerad längs vägen Innehåll > Katalog > Smart filter.

Komponenten tillhör modulen Informationsblock.

Läs mer om facetterad sökning

Låt oss skapa facettindex i några enkla steg:

Behöver jag återskapa fasetterade index?

Facetterade index återskapas automatiskt eller så måste du återskapa dem manuellt, beroende på de åtgärder som utförs:

Automatiskt Lade till nya eller redigerade befintliga Produkter.
skapa inte nya fastigheter.
Manuellt Systemet kommer att fråga dig med ett meddelande högst upp på sidorna
administrativ sektion.
Lagt till nytt eller redigerat katalogsektioner.
När du lägger till en ny egenskap eller tar bort en egenskap från smart filter.
Vid lossning av gods till exempel från 1C, om godset skapa nya fastigheter.

Facetterad sökning förbättrar arbetet med produktkatalogen. För att använda den behöver du:

  1. Skapa fasetterade index för produktkatalogen;
  2. Håll utkik efter en varning om behovet av att manuellt bygga om index.

Facetterad navigering är ett problem för alla e-handelssajter. Ett för stort antal sidor som används för olika varianter av samma element utgör ett hot mot sökningens effektivitet. Detta kan negativt påverka SEO och användarupplevelsen. Vad är facetterad navigering och hur man kan förbättra den, berättade experter från SEO Hacker-bloggen.

Facetterad navigering: definition

Denna typ av navigering finns vanligtvis i sidofälten på e-handelssajter, innehåller filter och facetter – alternativ som användaren konfigurerar efter önskemål. tillåter kunder i onlinebutiker att söka efter en önskad produkt med en kombination av attribut som filtrerar produkter tills användarna hittar det de behöver.

Aspekter och filter är olika. Här är skillnaden:

  • Fasetter är indexerade kategorier. De hjälper till att förfina produktlistorna och fungerar som en förlängning av huvudkategorierna. Fasetter tillför ett unikt värde för varje val användaren gör. Eftersom aspekterna är indexerade måste de skicka relevanta signaler till sökmotorn, för att säkerställa att sidan innehåller alla viktiga attribut.

  • Filter används för att sortera och förfina objekt i listor. De är nödvändiga för användare, men inte för sökmotorer. Filter indexeras inte eftersom de inte ändrar innehållet på sidan, de sorterar den bara i en annan ordning. Detta resulterar i att flera webbadresser har duplicerat innehåll.

Potentiella problem

Varje möjlig fasettkombination har sin egen unika URL. Det kan orsaka vissa problem när det gäller SEO. Här är de viktigaste:

  • Duplicerat innehåll.
  • Spendera en budget på skanning.
  • Eliminera länkskillnader.

När din webbplats växer ökar antalet dubbletter av sidor. Inkommande länkar kan gå till olika dubblerade sidor. Detta minskar värdet av länkar och begränsar sidrankningsmöjligheter.

Det ökar också sannolikheten för kannibalisering av sökord. Flera sidor försöker ranka för samma sökord, vilket resulterar i mindre stabila och lägre rankningar. Detta problem skulle kunna undvikas om varje sökord endast riktade in sig på en enda sida.

Lösningar för facetterad navigering

När du väljer en lösning på problemet med facetterad navigering, tänk på ditt slutmål: öka antalet indexerade sidor eller minska antalet sidor som du inte vill ska indexeras. Här är några lösningar som kan vara till hjälp för dig:

AJAX

Om du använder AJAX skapas ingen ny URL när användaren klickar på en aspekt eller ett filter. Eftersom det inte kommer att finnas unika webbadresser för alla möjliga kombinationer av aspekter, elimineras problemet med duplicerat innehåll, sökordskannibalisering och utgiftsindexeringskostnader.

AJAX kan bara vara effektiv innan lanseringen av en e-handelssida. Det används inte för att lösa problemen med redan befintliga resurser. Dessutom kräver denna metod vissa utgifter från din sida.

noindex-tagg

Noindex-taggen används för att tala om för bots att utesluta en viss sida från indexet. Därför kommer det inte att visas i Googles sökresultat. Detta minskar mängden duplicerat innehåll som visas i index och sökresultat.

Detta kommer inte att lösa problem med genomsökningsbudgeten eftersom bots fortfarande kommer att besöka din sida. Det hjälper inte heller att distribuera länkvärde.

rel=kanoniskt attribut

Med det här attributet berättar du för Google att du har en huvudsida att indexera och rangordna, och att alla andra innehållsversioner från den sidan bara är dubbletter som inte behöver indexeras.

Sofia Ibragimova

Innehållsmarknadsförare

Om samma sida på din webbplats kan nås från flera webbadresser, kommer sökmotorernas sökrobotar att behandla varje webbadress som en separat sida. Bots kommer att bestämma att innehållet på din webbplats inte är unikt, och detta kommer att påverka rankningen negativt och sänka din position i SERP. För att undvika detta, specificera den kanoniska huvudsidan genom att infoga följande teckensekvens i HEAD-blocket:

Du kan använda kanoniska sidor för att lösa problemet med duplicerat innehåll, och delningslänken kommer att slås samman med din huvudsida. Men det finns en chans att bots fortfarande kommer att genomsöka dubbletter av sidor, och detta är ett slöseri med genomsökningsbudget.

Robots.txt

Genom att stänga några av sidorna från indexering kan du uppnå bra resultat. Detta är ett enkelt, snabbt och pålitligt sätt. Det är mest praktiskt att ställa in ett anpassat alternativ för att specificera alla möjliga kombinationer av fasetter och filter som du vill blockera. Inkludera den i slutet av varje webbadress som du vill dölja (http://helsidesadress/robots.txt) eller använd Robots-metataggen i HEAD-området i sidkoden.

När du ändrar webbadressen måste du komma ihåg att det tar 3-4 veckor för robotar att märka dessa förändringar och reagera på dem.

Även här finns vissa problem. Länkarnas värde kommer att vara begränsat, och även den blockerade webbadressen kan indexeras på grund av närvaron av externa länkar.

Google Search Console

Det här är ett utmärkt sätt att tillfälligt åtgärda dina problem medan du arbetar med att bygga ett bättre och mer användarvänligt navigationssystem. Du kan använda Google Search Console för att berätta för sökmotorn hur den ska genomsöka din webbplats.

  • Logga in på ditt konsolkonto och välj avsnittet Genomsök:

  • Klicka på knappen "URL-parametrar":

  • Ange effekten av var och en av dina parametrar på sidan och hur Google ska behandla dessa sidor.

Kom ihåg att den här metoden endast döljer duplicerat innehåll från Googles sökrobotar. Bing- och Yahoo-sidor kommer fortfarande att dyka upp.

Hur man förbättrar facetterad navigering

Låt oss kort överväga alla metoder som låter dig skapa den korrekta facetterade navigeringen:

  • Använder AJAX
  • Ta bort eller dölj länkar till kategorier eller filtrera sidor som inte har något innehåll.
  • Tillåt indexering av vissa kombinationer av aspekter som har en hög sökvolym av trafik
  • Etablera webbplatshierarki genom brödsmulor i kategorier och underkategorier.
  • Skapa kanoniska (huvudsidor) för duplicerat innehåll.
  • Konsolidering av indexeringsegenskaper från komponentsidor till hela raden med siduppmärkning med rel = "nästa" och rel = "föregående" .

Slutsats

Var och en av de nämnda lösningarna har sina fördelar och nackdelar. Det finns ingen universell lösning, allt beror på särdragen i ditt företag och det specifika fallet. Optimerad facetterad navigering gör att din webbplats kan rikta in sig på ett bredare urval av sökord. För att undvika risker, se till att navigeringen inte bara uppfyller kraven för sökrobotar, utan även är bekväm med tanke på användarupplevelsen.

I dagens lektion kommer vi att försöka återskapa en simulerad fasetterad (facetterad) sökning med hjälp av Javascript. Jag menar att du redan vet vad facetterad sökning är genom att läsa den här handledningen, annars googla den eller kolla Amazon eller min demo.

Först behöver vi github.com/eikes/facetedsearch-biblioteket. Ladda ner den och inkludera filen facetedsearch.js i vårt projekt. Vi kommer också att behöva biblioteken jQuery och Underscore.

Varning: Jag förstår att JQ inte längre är en kaka, men med det som det vanliga syntaktiska sockret kan du skära det i mer välbekanta bibliotek eller vanilj JS.

Så först, låt oss göra en enkel markering med anslutna beroenden:

dokumentera

// Det är här vi kommer att mata ut de facetterade filtren
// Och här kommer våra element

Nu måste vi beskriva inställningarna för vår applikation och skapa en mall för att visa arrayelement som vi kommer att sortera med hjälp av fasetter:

Tja, skapa faktiskt själva JSON-arrayen med element som ska visas i vår facetterade sökning i JS:

Var items = [ ( "firstname": "Mary", "efternamn": "Smith", "imageURL": "http://lorempixel.com/150/150/cats/2", "description": "Sed Ea Amet. Stet Voluptua. Nonumy Magna Takimata ", "category": "Mouse", "language": ["Smalltalk", "XSLT"], "continent": "Africa"​), ( "firstname": "Patricia ", "lastname": "Johnson", "imageURL": "http://lorempixel.com/150/150/cats/3", "description": "Ut Takimata Sit Aliquyam Labore Aliquyam Sit Sit Lorem Amet. Ipsum Rebum ." , "category": "Lion", "continent": "Nordamerika")), ... ];

Jag skulle lägga denna array i en separat JS-fil som skulle bildas dynamiskt, till exempel från databasen.

Det är allt, vi får facetterad sökning i JavaScript och vi kan anpassa den. Därefter tillhandahåller jag den översatta dokumentationen för biblioteket, där du kan titta på triggers du behöver.

Dokumentation

Funktioner

De två funktionerna exporteras till jQuery-namnområdet.

facetelize Används för att initiera en fasetterad sökning med de givna inställningarna.

facetUpdate Kan användas om du vill ändra facettsökningsstatus utifrån.

Objektinställningar

artiklar: En uppsättning artiklar som ska filtreras och sorteras under processen.

fasetter: Ett objekt vars nycklar motsvarar elementnycklar och värden är rubriken för denna aspekt. Objekt kommer att filtreras baserat på vilket värde de har för dessa nycklar.

orderByOptions: Liknar fasetter, förutom att dessa nyckel/värdepar endast används för sortering. När RANDOM-tangenten är aktiverad kan resultaten slumpas.

facetSelector: Detta är väljaren som används för att hitta DOM-noden från vilken facetfiltren väljs.

resultSelector: Detta är väljaren som används för att hitta DOM-noden där resultaten visas.

resultTemplate: En sträng som används av mallmotorn Underscore för att rendera varje element från objektmatrisen. Följande attribut läggs till för varje element som också kan användas i en mall: batchItemNr , batchItemCount , och totalItemCount .

state: Detta objekt sparar de aktuella filtren, sorterar: currentResult och andra. Du kan tillhandahålla en orderBy-sträng eller ett filterobjekt för att förkonfigurera dem.

enablePagination: Boolean för att aktivera paginering och "ladda in mer"-knappen, sant som standard.

pagineringCount: Om paginering är aktiverat, anger antalet objekt per sida, standard är 50.

facetSortOption: Använd den här funktionen för att ändra ordningen på facettelement. Tar ett objekt där nycklarna motsvarar fasettnamnen och -värdena till en rad fasettvärden, som kan ordnas i den ordning du vill se dem. Det här exemplet kommer att sortera kontinenterna i en annan ordning, de element som inte ingår i arrayen kommer att läggas till i alfabetisk ordning:

FacetSortOption: ("kontinent": ["Nordamerika", "Sydamerika"))

Det finns flera fler mallar, se facetedsearch.js källkod för att se alla tillgängliga mallalternativ.

evenemang

Du kan binda till vissa händelser som ska skicka meddelanden när någon åtgärd har ägt rum. För att göra detta använder vi händelsesystemet jQuery:

facetuicreated: Du kan binda den här funktionen till DOM-elementet settings.facetSelector som ska meddelas när användargränssnittet har skapats.

facetedsearchresultupdate: Du kan binda den här funktionen till settings.resultSelector DOM-elementet för att meddelas om uppdateringsresultaten.

facetedsearchfacetclick: Denna händelse utlöses när en fasett klickas och aktiveras på elementet settings.facetSelector. Som får facett-ID som argument.

facetedsearchorderby: Denna händelse utlöses när sorteringselementet klickas på elementet settings.facetSelector. Den tar emot ID-ordern som ett argument.

$(settings.resultSelector).bind("facetedsearchresultupdate", function()( // gör något, kanske ));

Inbyggd fasetterad sökning

Inbyggd i produkten

Den facetterade sökningen som är inbyggd i webbutiken – internsökning – fungerar snabbt på många sätt och laddar inte systemet.

  • Inbyggd i produkten
  • Väldigt snabbt
  • Webbplatsen laddas inte
  • Det är huvuddelen av infoblocks API
  • Kräver inte omdesign av webbplatser
  • Omindexeras automatiskt
Varför är det väldigt snabbt?

Klienten visar omedelbart förberedda sökresultat - för valfri kombination av parametrar - fasett. Systemet förberäknar aspekter för produkten - alla möjliga skärningar av dessa egenskaper i filtret. Dessa färdiga sökuppsättningar skickas sedan ut till kunderna.

Varför laddas inte sajten?

Vid tidpunkten för utfärdande av resultatet till klienten sker inga beräkningar, eftersom resultatet redan är klart. En aspekt för en ny produkt skapas direkt när den läggs till i försäljningskatalogen. Sökningen indexeras automatiskt på nytt baserat på nya produkter och nya funktioner.

Fördelar för kunder

Fördelar med facetterad sökning

Din kund hittar produkten mycket snabbt och leker lätt med filterinställningarna. Kunden väntar inte utan får omedelbart resultatet. Sökhastigheten beror inte på antalet artiklar i katalogen.


Smart Filter 2.0

Kunden hittar snabbt produkten

Din kund hittar en produkt mycket snabbt genom att konsekvent begränsa sökfrågan. Och vid varje steg får han omedelbart resultat - en lista över produkter på begäran. Han behöver inte vänta på att hans begäran ska behandlas. Eftersom systemet har beräknat alla möjliga alternativ i förväg, och helt enkelt utfärdar blanks. Efter hand producerar webbutiken allt mindre produkter som resultat. Dessa produkter kommer närmare och närmare kundens önskemål.

Interaktivitet och multidimensionalitet

Valet av varor för köparen liknar ett spel. Klienten drar parametrar (pris, vikt), byter egenskaper (färg, storlek), ställer in ytterligare villkor (märke, material, smak, etc.) - och systemet bygger omedelbart om resultaten. Samtidigt kan det finnas ett valfritt antal justerbara parametrar - deras antal påverkar inte hastigheten för att generera resultatet.

Bekvämlighet och vänlighet

Med facetterad navigering kan även en oerfaren användare enkelt hämta en produkt i butiken. Att manipulera sökverktyg är mycket bekvämt. Dessutom ber systemet köparen om alla parametrar med vilka han kan välja en produkt. Butiken visar så att säga för kunden produktens huvudegenskaper.

Kunden väntar inte på att begäran ska behandlas!
Din kund köper till exempel en kamera. Inledningsvis specificerar han bara 3 parametrar i det smarta filtret: pris, märke, storlek. Hans aspekt inkluderar 3 korsningar, det finns många sökresultat, men klienten får dem omedelbart. Klienten ställer in vikten - han behöver en lätt pryl. Systemet ger honom omedelbart, utan dröjsmål, en mindre varulista. Klienten ställer in skärmstorleken och anger sedan önskad funktionalitet. Framför honom - de önskade varorna.


Sökhastighet

Sökhastigheten spelar roll

Sökhastigheten påverkar antalet köp som görs

Inget gör en kund förbannad som att ha problem med att hitta produkter på din webbplats. Kunden kommer att åka till andra butiker om han söker för länge. Även om din butik innehåller ett stort utbud av produkter och många verktyg för att filtrera dem. Kunden får inte vänta på resultatet av begäran.


Videohandledning: Varför fasetterad sökning snabbar upp det smarta filtret många gånger
Att använda en "fasett" påskyndar sökningen inne i butiken med en storleksordning. Samtidigt beror hastigheten inte på antalet element i katalogen.

Varför går sökningen för långsam?
Att söka efter en produkt i ett skyltfönster kan ta betydligt längre tid än normala sidladdningstider. Särskilt om det finns ett stort antal varor i butiken och egenskaperna hos dessa varor. En sökfråga för många parametrar skapar många databasanrop och belastar webbplatsen avsevärt. Om det är många kunder och förfrågningar saktar sökningen ner märkbart.

Arbetshastigheten är imponerande!

Testresultaten av version 15.0 av produkten på tre kategorier av kataloger som innehåller 500 000 artiklar visade att jämfört med tidigare versioner:
  • Smart filterkomponent - 15 gånger snabbare!
  • Katalogkomponent - 5 gånger snabbare!
Sökintelligens förblir konstant!

Snabb även utan "facetten"!

Produkten arbetar ständigt med att accelerera själva katalogkomponenterna. Tjänsten Site Speed ​​​​visar en betydande ökning i hastighet från version till version!

Rekonstruktion

Indexering och sökresultat rekonstrueras ständigt. Algoritmen för innehållsindexering håller på att omarbetas och accelereras. Kvaliteten på presentationen av sökresultaten förbättras - i synnerhet minskar "brusigheten". Utvecklarna planerar att visa personlig data för den aktuella klienten i sökresultaten.

Utvecklare: API-transparens


tidigare syn

Facet är API-transparent

"Fasetten" som är inbyggd i produkten är transparent för API:et. Det är huvuddelen av infoblocks API. Därför kräver det inte ytterligare ansträngningar för utvecklare att använda det. Det kräver inte heller omdesign av webbplatser.
  • Acceleration av CIBlockElement::GetList-metoden
  • Full integration med smart filter
GetList är nu snabbare eftersom den automatiskt innehåller en "facett" för att fungera. Det finns också ett separat API på D7.

Full integration med smart filter

Nu, genom att göra inställningar i den administrativa delen, kan du inte bara ställa in aktiviteten för produktegenskaper – om du vill delta i det smarta filtret eller inte. Genom att skicka en egenskap till ett Smart Filter kan du direkt välja hur du vill visa dem. I vilken form ska man visa fastigheten för kunder: knappar, storlekar, skjutreglage, rullgardinslistor, listor med val av färg, etc.



Visa egendom i Smart Filter

Kan anpassas!

Smart filter ser nu snyggare ut. Utvecklare kan enkelt anpassa och ytterligare anpassa dess utseende.