("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 ta et eksempel:
Vi går til nettbutikken og velger i filteret at vi trenger en rød T-skjorte:
|
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:
|
Fasettsøk forbedrer produktkatalogytelsen. For å bruke det trenger du:
- Lag fasetterte indekser for produktkatalogen;
- 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: definisjonDenne 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:
Potensielle problemerHver mulig kombinasjon av fasetter har sin egen unike URL. Det kan forårsake noen problemer fra et SEO-standpunkt. Her er de viktigste:
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øsningerNå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: AJAXHvis 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-tagNoindex-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 attributtMed 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.txtVed å 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 ConsoleDette 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.
Husk at denne metoden bare skjuler duplikatinnhold fra Googles robotsøkeprogrammer. Bing og Yahoo vil fortsette å vise sider. Hvordan forbedre fasettert navigasjonLa oss ta en rask titt på alle metodene som lar deg lage riktig fasettert navigasjon:
KonklusjonHver 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:
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. DokumentasjonFunksjonerTo 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. Objektinnstillingerelementer: 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. UtviklingerDu 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økInnebygd i produktetDet fasetterte søket innebygd i nettbutikken – internt søk – fungerer raskt i mange parametere og laster ikke systemet.
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økKunden 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.
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! Søkehastighet Søkehastighet er viktigSøkehastighet påvirker antall kjøpIngenting 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.
Hvorfor går søket så tregt? 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:
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
"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.
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.
Det smarte filteret ser vakrere ut. Utviklere kan enkelt tilpasse og ytterligere tilpasse utseendet. |