Fasettsøk. PINQ - Polled datasett. Fasettsøk. Vi setter aspektene og viser de første dataene

("query": ("og": [("vilkår": ("land": ["være", "fr"))), ("vilkår": ("kategori": ["bøker", "filmer") "]))]))

For tellere kan vi bruke innebygde aggregater fra Elasticsearch. Hver av de to fasettene er lagret som ett felt i indeksen, slik at vi kan samle termer i hvert av disse feltene. Aggregering vil returnere telleren for verdien av dette feltet.

("query": ("og": [("vilkår": ("land": ["være", "fr"))), ("vilkår": ("kategori": ["bøker", "filmer") "]))])," aggregasjoner ": (" land ": (" termer ": (" felt ":" land "))," kategorier ": (" termer ": (" felt ":" kategori ") )))

Hvis du fulgte denne spørringen, vil du legge merke til at tellerne er deaktivert. De to uvalgte landene, Portugal og Brasil, har en teller på 0. Selv om det er faktiske resultater hvis vi ønsker å velge dem (på grunn av ELLER-innerkanten). Dette er fordi Elasticsearch som standard utfører aggregeringene på resultatsettet. Dette betyr at hvis du velger Frankrike, vil filtrene til det andre landet ha en poengsum på 0, fordi resultatsettet kun inneholder elementer fra Frankrike.

For å fikse dette, må vi instruere Elasticsearch til å aggregere på tvers av hele datasettet, og ignorere forespørselen. Vi kan gjøre dette ved å definere våre klynger som globale.

("query": ("og": [("vilkår": ("land": ["være", "fr"))), ("vilkår": ("kategori": ["bøker", "filmer") "]))])," aggregasjoner ": (" alle_produkter ": (" globale ": ()," aggregasjoner ": (" land ": (" termer ": (" felt ":" land "))," kategorier ": (" termer ": (" felt ":" kategori "))))))

Hvis vi bare gjorde dette, ville tellerne våre alltid vært de samme fordi de alltid ville telle på hele datasettet, uavhengig av filtrene våre. Aggregatene våre må bli litt mer komplekse for at dette skal fungere, vi må legge til filtre til dem. Hver aggregering må være avhengig av et datasett med alle filtre brukt bortsett fra sine egne. Dermed teller aggregering etter konto i Frankrike på et datasett som bruker et kategorifilter, men ikke et landfilter:

("query": ("og": [("vilkår": ("land": ["være", "fr"))), ("vilkår": ("kategori": ["bøker", "filmer") "]))])," aggregations ": (" alle_produkter ": (" globale ": ()," aggregations ": (" land ": (" filter ": (" og ": [(" termer ": ( "category": ["bøker", "filmer"]))]), "aggregations": ("filtrerte_land": ("terms": ("felt": "land")))), "kategorier": ( "filter": ("og": [("terms": ("land": ["be", "fr"]))]), "aggregations": ("filtred_categories": ("terms": (" felt ":" kategori "))))))))

("tok": 153, "timed_out": false, "_shards": ("total": 5, "successful": 5, "failed": 0), "hits": ("total": 3, "max_score" ": 0," treff ": [" ... "])," aggregasjoner ": (" alle_produkter ": (" doc_count ": 21," filtrerte kategorier ": (" doc_count ": 13," kategorier ": ( "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)])), "filtered_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 rammeverk

$ termer = QueryHelper :: termer ("kategorier.navn", "min kategori"); $ nested = QueryHelper :: nested ("string_facet", QueryHelper :: filter ([QueryHelper :: term ("string_facet.facet_name", ["value" => $ id, "boost" => 1]), QueryHelper :: term ("string_facet.facet_value", ["value" => $ verdi, "boost" => 1]),])); $ filter = QueryHelper :: burde ($ nestet);

Det moderne mennesket prøver å bruke mindre og mindre tid på kjøp. Langsomme produktkataloger skyver kunder unna, butikken mister kunder og noe av overskuddet. Gjør nettbutikken din mer attraktiv med teknologi fasettert Fasettert – dvs. forhåndsdefinert. Søk. Skape fasetterte indekser og øke raskt søket etter varer og arbeidet med hele katalogen betydelig.

Merk: Den fasetterte søkemotoren er tilgjengelig siden modulversjon 15.0.1 Informasjonsblokker og integrert med komponent Komponent er en programkode, designet i et visuelt skall, som utfører en spesifikk funksjon av enhver modul for å vise data i den offentlige delen. Vi kan sette inn denne kodeblokken på nettstedssider uten å skrive noen kode direkte. Smart filter Komponenten klargjør et filter for valg fra en infoblokk og viser et filterskjema for filtrering av elementer. Komponenten må kobles til før komponenten for å vise katalogelementer, ellers vil ikke listen over elementer bli filtrert. Komponenten er standard, er inkludert i moduldistribusjonssettet og inneholder tre maler: .misligholde, visuell_horisontal og visual_vertical... (De to siste malene støttes ikke, men for å opprettholde kompatibiliteten.)

I den visuelle editoren er komponenten plassert langs banen Innhold> Katalog> Smart Filter.

Komponenten tilhører modulen Informasjonsblokker.

Mer om fasettert søk

La oss skape fasetterte indekser i noen få enkle trinn:

Må fasetterte indekser gjenskapes?

Fasetterte indekser gjenskapes automatisk eller du må gjenskape dem manuelt, avhengig av handlingene som utføres:

Automatisk Lagt til nye eller redigert eksisterende varer.
ikke opprette nye eiendommer.
Manuelt Systemet vil spørre deg om dette med en melding øverst på sidene.
administrativ seksjon.
Lagt til ny eller redigert katalogseksjoner.
Når du legger til en ny eller fjerner en eiendom fra smart filter.
Ved lossing av varer for eksempel fra 1C, hvis varene skape nye eiendommer.

Fasettsøk forbedrer produktkatalogytelsen. For å bruke det trenger du:

  1. Lag fasetterte indekser for produktkatalogen;
  2. Se etter varsling for å gjenoppbygge indekser manuelt.

Fasettnavigering er et problem for alle e-handelssider. Et for stort antall sider som brukes til forskjellige varianter av det samme elementet setter søkeresultatene i fare. Dette kan påvirke SEO og brukeropplevelse negativt. Hva er fasettert navigasjon og hvordan du kan forbedre det, ifølge eksperter fra SEO Hacker-bloggen.

Fasettnavigasjon: definisjon

Denne typen navigering finnes vanligvis i sidefeltene på e-handelssider, inneholder filtre og fasetter – parametere som brukeren kan tilpasse som de ønsker. lar nettbutikkkunder søke etter et ønsket produkt ved å bruke en kombinasjon av attributter som vil filtrere produktene til brukerne finner det de vil ha.

Fasetter og filtre er forskjellige fra hverandre. Her er forskjellen:

  • Fasetter er indekserte kategorier. De hjelper til med å avgrense produktoppføringer og fungerer som en forlengelse av hovedkategoriene. Fasetter gir en unik verdi til hvert valg brukeren gjør. Siden fasettene er indeksert, må de sende relevante signaler til søkemotoren, for å sikre at siden inneholder alle viktige attributter.

  • Filtre brukes til å sortere og avgrense elementer i lister. De er nødvendige for brukere, men ikke for søkemotorer. Filtre blir ikke indeksert fordi de ikke endrer innholdet på siden, de bare sorterer det i en annen rekkefølge. Dette resulterer i at flere nettadresser har duplisert innhold.

Potensielle problemer

Hver mulig kombinasjon av fasetter har sin egen unike URL. Det kan forårsake noen problemer fra et SEO-standpunkt. Her er de viktigste:

  • Duplisert innhold.
  • Sløsing med budsjett på skanning.
  • Eliminer forskjellen i lenker.

Ettersom nettstedet ditt vokser, øker også antallet dupliserte sider. Innkommende lenker kan gå til ulike dupliserte sider. Dette senker verdien av lenkene og begrenser sidens rangeringer.

Sannsynligheten for kannibalisering av søkeord øker også. Flere sider prøver å rangere for de samme søkeordene, noe som resulterer i mindre konsistente og lavere rangeringer. Dette problemet kunne vært unngått hvis hvert søkeord bare var ment for en bestemt side.

Fasetterte navigasjonsløsninger

Når du bestemmer deg for en løsning på det fasetterte navigasjonsproblemet ditt, må du huske på det endelige målet ditt: øke antall sider som skal indekseres, eller redusere antall sider du ikke vil skal indekseres. Her er noen løsninger som kan være nyttige:

AJAX

Hvis du bruker AJAX, genereres ingen ny URL når brukeren klikker på en fasett eller et filter. Siden det ikke vil være unike URL-er for alle mulige kombinasjoner av fasetter, er problemet med duplikatinnhold, søkeordkannibalisering og bortkastede indekseringskostnader potensielt eliminert.

AJAX kan bare være effektiv før e-handelssiden er lansert. Det brukes ikke til å løse problemer med eksisterende ressurser. Dessuten krever denne metoden visse utgifter fra din side.

Noindex-tag

Noindex-taggen brukes til å fortelle roboter om å ekskludere en bestemt side fra indeksen. Derfor vil den ikke vises i Googles søkeresultater. Dette bidrar til å redusere mengden duplikatinnhold som vises i indeksen og søkeresultatene.

Dette vil ikke løse problemet med gjennomsøkingsbudsjettet fordi roboter fortsatt vil besøke siden din. Det hjelper heller ikke å distribuere lenkeverdien.

Rel = kanonisk attributt

Med dette attributtet forteller du Google at du har én foretrukket hovedside å indeksere og rangere, og alle andre versjoner av innholdet fra den siden er bare duplikater som ikke trenger å indekseres.

Sofia Ibragimova

Innholdsmarkedsfører

Hvis den samme siden på nettstedet ditt kan nås av flere nettadresser, vil søkemotorsøkeprogrammer behandle hver nettadresse som en separat side. Bots vil bestemme at innholdet på nettstedet ditt ikke er unikt, noe som vil påvirke rangeringene negativt og senke rangeringene dine. For å unngå dette, spesifiser den kanoniske hovedsiden ved å sette inn følgende sekvens av tegn i HEAD-blokken:

Du kan bruke kanoniske sider for å løse problemet med duplikatinnhold, og aksjelinken vil bli slått sammen med hovedsiden din. Men det er en sjanse for at roboter fortsatt vil gjennomsøke dupliserte sider, noe som er bortkastet gjennomgangsbudsjett.

Robots.txt

Ved å lukke deler av sidene fra indeksering kan du oppnå gode resultater. Dette er en enkel, rask og pålitelig måte. Den mest praktiske måten er å angi en konfigurerbar parameter for å spesifisere alle mulige kombinasjoner av fasetter og filtre som du vil blokkere. Inkluder den på slutten av hver URL du vil skjule (http: // helsides URL / robots.txt), eller bruk Robots-metakoden i HEAD-området i sidekoden.

Når du endrer nettadressen, husk at det tar 3–4 uker før roboter legger merke til og reagerer på disse endringene.

Det er visse problemer her også. Verdien av lenkene vil være begrenset, og den blokkerte URL-en kan bli indeksert på grunn av tilstedeværelsen av eksterne lenker.

Google Search Console

Dette er en fin måte å midlertidig fikse problemene mens du jobber med et bedre, mer brukervennlig navigasjonssystem. Du kan bruke Google Search Console til å fortelle søkemotoren hvordan den skal gjennomsøke nettstedet ditt.

  • Logg på konsollkontoen din og velg Gjennomsøk-delen:

  • Klikk på URL-parametere-knappen:

  • Angi virkningen av hver av parameterne dine på siden og hvordan Google bør håndtere disse sidene.

Husk at denne metoden bare skjuler duplikatinnhold fra Googles robotsøkeprogrammer. Bing og Yahoo vil fortsette å vise sider.

Hvordan forbedre fasettert navigasjon

La oss ta en rask titt på alle metodene som lar deg lage riktig fasettert navigasjon:

  • Bruker AJAX
  • Fjern eller skjul koblinger til kategorier eller filtrer sider som mangler innhold.
  • Tillat indeksering av visse kombinasjoner av fasetter som har et høyt volum av søketrafikk
  • Sette nettstedshierarki gjennom brødsmuler i kategorier og underkategorier.
  • Oppretting av kanoniske (hoved)sider for duplikatinnhold.
  • Konsolider indekseringsegenskaper fra komponentsider til en hel rad ved å bruke sidemarkering med rel = "neste" og rel = "forrige".

Konklusjon

Hver av de nevnte løsningene har sine egne fordeler og ulemper. Det er ingen løsning som passer alle, alt avhenger av spesifikasjonene til virksomheten din og den spesifikke saken. Optimalisert fasettert navigasjon lar nettstedet ditt målrette mot et bredere sett med søkeord. For å unngå risiko, sørg for at navigasjonen din ikke bare reagerer på søkemotorsøkeprogrammer, men også brukervennlig.

I dagens leksjon vil vi prøve å gjenskape imitasjonen av fasettert (fasettert) søk ved hjelp av Javascript. Jeg antar at du allerede vet hva fasettert søk er siden du leser denne opplæringen, ellers google den eller sjekk ut Amazon eller min Demo.

Først trenger vi github.com/eikes/facetedsearch-biblioteket. Last den ned og inkluder filen facetedsearch.js i prosjektet vårt. Vi trenger også jQuery- og Underscore-bibliotekene.

Ansvarsfraskrivelse: Jeg forstår at JQ ikke lenger er en kake, men jeg bruker det som et kjent syntaktisk sukker, du kan sage det under dine mer kjente biblioteker eller i vanilje JS.

Så la oss først lage en enkel markering med tilkoblede avhengigheter:

Dokument

// Det er her vi skal sende ut fasettfiltrene
// Og her vil være elementene våre

Nå må vi beskrive innstillingene til applikasjonen vår og lage en mal for å vise array-elementer som vi vil sortere ved hjelp av fasetter:

Vel, lag faktisk selve JSON-arrayen med elementer som skal vises i vårt fasetterte søk i JS:

Var items = [("firstname": "Mary", "lastname": "Smith", "imageURL": "http://lorempixel.com/150/150/cats/2", "description": "Sed Ea Amet. Stet Voluptua. Nonumy Magna Takimata "," kategori ":" Mus "," språk ": [" Smalltalk "," XSLT "]," kontinent ":" Afrika "), (" fornavn ":" 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": "Løve", "continent": "Nord-Amerika"), ...];

Jeg vil sette denne matrisen inn i en egen JS-fil som vil bli generert dynamisk, for eksempel fra en database.

Det er alt, vi får fasettert søk i JavaScript og kan tilpasse det. Deretter presenterer jeg den oversatte bibliotekdokumentasjonen, der du kan spionere på triggerne du trenger.

Dokumentasjon

Funksjoner

To funksjoner eksporteres til jQuery-navneområdet.

facetelize Brukes til å initialisere fasettert søk med de spesifiserte innstillingene.

facetUpdate Kan brukes når du vil endre tilstanden til fasettsøket eksternt.

Objektinnstillinger

elementer: En rekke elementer som skal filtreres og sorteres i prosessen.

fasetter: Objektet som nøkler tilsvarer elementnøkler og verdier for, er tittelen for denne fasetten. Elementer vil bli filtrert basert på hvilken verdi de har for disse nøklene.

orderByOptions: Ligner på fasetter, bortsett fra at disse nøkkelverdi-parene bare brukes til sortering. Når RANDOM-bryteren er på, kan resultatene randomiseres.

facetSelector: Dette er en velger som brukes til å finne DOM-noden som fasettfiltrene skal velges fra.

resultSelector: Dette er en velger som brukes til å finne DOM-noden der resultatene vises.

resultTemplate: En streng som brukes av Underscore-malmotoren for å gjengi hvert element i elementmatrisen. Følgende attributter legges til hver vare som også kan brukes i en mal: batchItemNr, batchItemCount og totalItemCount.

tilstand: Dette objektet lagrer gjeldende filtre, sorterer: currentResult og andre. Du kan angi en orderBy-streng eller et filterobjekt for å forhåndskonfigurere dem.

enablePagination: Boolsk for å aktivere paginal og "last mer"-knappen, sant som standard.

paginationCount: Hvis paginering er aktivert, angir antall elementer per side, standard er 50.

facetSortOption: Bruk denne funksjonen til å endre rekkefølgen på fasettelementer. Aksepterer et objekt der tastene tilsvarer fasettnavn og verdier i en rekke fasettverdier, som kan ordnes i den rekkefølgen du vil at de skal være. Dette eksemplet vil sortere kontinenter i en annen rekkefølge, og legge til elementer som ikke er inkludert i matrisen i alfabetisk rekkefølge:

FacetSortOption: ("kontinent": ["Nord-Amerika", "Sør-Amerika"))

Det er noen flere maler, se kildekoden til facetedsearch.js for å se alle tilgjengelige malalternativer.

Utviklinger

Du kan binde deg til enkelte hendelser som skal sende varsler når en handling har skjedd. Til dette bruker vi jquery-hendelsessystemet:

facetuicreated: Du kan binde denne funksjonen til DOM-elementet settings.facetSelector som skal varsles når brukergrensesnittet er opprettet.

facetedsearchresultupdate: Du kan binde denne funksjonen til DOM-elementet settings.resultSelector for å bli varslet om oppdateringsresultatet.

facetedsearchfacetclick: Denne hendelsen utløses når en fasett klikkes og utløses på settings.facetSelector-elementet. Som får en fasett-ID som argument.

facetedsearchorderby: Denne hendelsen oppstår når et sorteringselement klikkes på settings.facetSelector-elementet. Den mottar ordre-ID som et argument.

$ (settings.resultSelector) .bind ("facetedsearchresultupdate", funksjon () (// gjør noe, kanskje));

Innebygd fasettert søk

Innebygd i produktet

Det fasetterte søket innebygd i nettbutikken – internt søk – fungerer raskt i mange parametere og laster ikke systemet.

  • Innebygd i produktet
  • Veldig fort
  • Laster ikke inn siden
  • Er hoveddelen av infoblock API
  • Krever ikke redesign av nettstedet
  • Automatisk reindeksert
Hvorfor veldig fort?

Klienten blir umiddelbart presentert med forhåndsforberedte søkeresultater - for enhver kombinasjon av parametere - fasett. Systemet beregner på forhånd fasettene for produktet - alle slags skjæringer av disse egenskapene i filteret. Disse ferdige søkepakkene deles deretter ut til kundene.

Hvorfor laster den ikke inn siden?

Når resultatet returneres til klienten, skjer ingen beregning, fordi resultatet allerede er klart. En fasett for et nytt produkt opprettes umiddelbart etter at det er lagt til i handelskatalogen. Søket indekseres automatisk på nytt basert på nye produkter og nye egenskaper.

Kundefordeler

Fordeler med fasettert søk

Kunden din finner et produkt veldig raskt, og leker lett med filterinnstillingene. Klienten venter ikke og får resultatet umiddelbart. Søkehastigheten avhenger ikke av antall varer i katalogen.


Smart filter 2.0

Kunden finner raskt produktet

Kunden din finner et produkt veldig raskt, og begrenser konsekvent søket. Og ved hvert trinn mottar han øyeblikkelig resultater - en liste over produkter på forespørsel. Han trenger ikke vente på at forespørselen hans skal behandles. Fordi systemet har beregnet alle mulige alternativer på forhånd, og gir rett og slett ut blanks. Etter hvert gir nettbutikken ut mindre og mindre produkter som resultater. Disse produktene kommer nærmere og nærmere kjøperens forespørsel.

Interaktivitet og flerdimensjonalitet

Å velge et produkt for en kunde er som et spill. Klienten drar parameterboksene (pris, vekt), bytter egenskaper (farge, størrelse), setter tilleggsbetingelser (merke, materiale, smak osv.), og systemet gjenoppbygger umiddelbart resultatene. Samtidig kan det være så mange justerbare parametere som du vil - antallet deres påvirker ikke hastigheten på dannelsen av resultatet.

Bekvemmelighet og vennlighet

Med fasettert navigering kan selv en uerfaren bruker enkelt finne et produkt i en butikk. Det er veldig praktisk å manipulere søkeverktøyene. I tillegg ber systemet kjøperen om alle parametere som han kan velge et produkt med. Butikken demonstrerer så å si for kunden de grunnleggende egenskapene til produktet.

Kunden venter ikke på at forespørselen skal behandles!
La oss for eksempel si at kunden din kjøper et kamera. Til å begynne med indikerer han bare 3 parametere i det smarte filteret: pris, merke, størrelse. Fasetten inneholder 3 kryss, det er mange søkeresultater, men klienten får dem umiddelbart. Klienten setter vekten - han trenger en lett dings. Systemet gir ham umiddelbart, uten forsinkelser, en mindre vareliste. Klienten angir skjermstørrelsen, og spesifiserer deretter den nødvendige funksjonaliteten. Foran ham er de ettertraktede varene.


Søkehastighet

Søkehastighet er viktig

Søkehastighet påvirker antall kjøp

Ingenting irriterer en kunde som å ha problemer med å finne produkter på nettstedet ditt. Kunden vil gå til andre butikker hvis de søker for lenge. Selv om butikken din inneholder et stort utvalg av produkter og mange verktøy for å filtrere dem. Klienten kan ikke vente på resultatene på forespørselen.


Videoopplæring: Hvorfor fasettert søk øker smartfilteret dramatisk
Ved å bruke "fasett" øker søk i butikken med en størrelsesorden. Dessuten avhenger ikke hastigheten av antall varer i katalogen.

Hvorfor går søket så tregt?
Å søke etter en vare i en butikkfront kan ta betydelig lengre tid enn normal sideinnlastingstid. Spesielt når det er et stort antall produkter i butikken og egenskapene til disse produktene. Et søk med mange parametere skaper mange anrop til databasen og belaster nettstedet betydelig. Hvis det er mange klienter og forespørsler, bremses søket betraktelig.

Arbeidshastigheten er imponerende!

Testresultatene av versjon 15.0 av produktet på tre kategorier av kataloger som inneholder 500 tusen gjenstander viste at sammenlignet med tidligere versjoner:
  • Smart filterkomponent - 15 ganger raskere!
  • Katalogkomponent - 5 ganger raskere!
Søkeintelligens forblir konstant!

Rask selv uten en fasett!

Produktet jobber hele tiden med å øke hastigheten på selve katalogkomponentene. Tjenesten "Site Speed" viser en betydelig økning i hastighet fra versjon til versjon!

Gjenoppbygging

Kontinuerlig rekonstruksjon av indeksering og søkeresultater pågår. Algoritmen for innholdsindeksering blir revidert og akselerert. Kvaliteten på presentasjonen av søkeresultater er forbedret - spesielt reduseres "støyen". Utviklerne planlegger å vise personlig tilpassede data for gjeldende klient i søkeresultater.

For utviklere: åpenhet for API


Forrige visning

"Fasettet" er gjennomsiktig for API

"Fasettet" som er innebygd i produktet er gjennomsiktig for API. Det er hoveddelen av infoblock API. Derfor krever det ikke ekstra innsats for utviklere å bruke det. Det er heller ikke nødvendig å omarbeide nettstedet.
  • Fremskynde CIBlockElement :: GetList-metoden
  • Full integrasjon med smart filter
GetList er nå raskere fordi den automatisk kobler en "fasett" for å fungere. Det er også et eget API på D7.

Full integrasjon med smart filter

Nå, når du gjør innstillinger i den administrative delen, for egenskapene til varer, kan du ikke bare angi aktiviteten - om du vil delta i smartfilteret eller ikke. Ved å sende en egenskap til Smart Filter, kan du umiddelbart velge alternativet for å vise dem. Hvordan vise eiendommen til kunder: knapper, størrelser, skyveknapper, rullegardinlister, fargevalgbare lister, etc.



Vis eiendom i Smart-filter

Kan tilpasses!

Det smarte filteret ser vakrere ut. Utviklere kan enkelt tilpasse og ytterligere tilpasse utseendet.