Facetsøgning. PINQ - Interrogerede datasæt. Facetsøgning. Indstil aspekter og vis indledende data

( "query": ( "og": [ ( "terms": ("land": ["være", "fr")) ), ( "terms": ("kategori": ["bøger", "film "])) ] ))

Til tællere kan vi bruge de indbyggede aggregater fra Elasticsearch. Hver af de to facetter er gemt som ét felt i indekset, så vi kan bruge termaggregering i hvert af disse felter. Aggregeringen returnerer en tæller for værdien af ​​dette felt.

( "query": ( "og": [ ( "terms": ("land": ["være", "fr")) ), ( "terms": ("kategori": ["bøger", "film "]) ) ] ), "aggregations": ( "lande": ( "terms": ("felt": "land") ), "kategorier": ( "terms": ("felt": "kategori") ) ) )

Hvis du skulle køre denne forespørgsel, ville du bemærke, at tællerne er deaktiveret. De to ikke-udvalgte lande, Portugal og Brasilien, har et tal på 0. Selvom der er faktiske resultater, hvis vi ønsker at vælge dem (på grund af ELLER inde i kanten). Dette skyldes, at Elasticsearch som standard udfører sine aggregeringer på resultatsættet. Det betyder, at hvis du vælger Frankrig, vil de andre landefiltre have en score på 0, fordi resultatsættet kun indeholder elementer fra Frankrig.

For at rette op på dette skal vi instruere Elasticsearch i at udføre aggregeringen på hele datasættet og ignorere forespørgslen. Det kan vi gøre ved at definere vores klynger som globale.

( "query": ( "og": [ ( "terms": ("land": ["være", "fr")) ), ( "terms": ("kategori": ["bøger", "film "]) ) ] ), "aggregations": ( "all_products": ( "global": (), "aggregations": ( "lande": ( "terms": ("felt": "land") ), " kategorier": ( "terms": ("felt": "kategori") ) ) ) ) )

Hvis vi bare gjorde det, ville vores tællere altid være de samme, fordi de altid ville regne med hele datasættet, uanset vores filtre. Vores aggregater skal blive lidt mere komplekse, for at dette skal virke, skal vi tilføje filtre til dem. Hver aggregering skal regne med et datasæt med alle anvendte filtre undtagen dets eget. Så aggregeringen for kontoen i Frankrig tæller på datasættet med kategorifilteret anvendt, men ikke landefilteret:

( "query": ( "og": [ ( "terms": ("land": ["være", "fr")) ), ( "terms": ("kategori": ["bøger", "film "]) ) ] ), "aggregations": ( "all_products": ( "global": (), "aggregations": ( "lande": ( "filter": ( "og": [ ( "terms": () "category": ["bøger","film"]) ) ] ), "aggregations": ( "filtred_countries": ( "terms": ("felt": "land") ) ), "kategorier": ( "filter": ( "og": [ ( "terms": ("land": ["være","fr")) ] ), "aggregations": ( "filtred_categories": ( "terms": (" field": "kategori") ) ) ) ) ) ) )

( "tog": 153, "timed_out": falsk, "_shards": ( "total": 5, "successful": 5, "failed": 0 ), "hits": ( "total": 3, "max_score ": 0, "hits": ["..."] ), "aggregations": ( "alle_produkter": ( "doc_count": 21, "filtrerede 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 ramme

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

En moderne person forsøger at bruge mindre og mindre tid på indkøb. Langsomme produktkataloger afviser kunder, butikken mister kunder og en del af overskuddet. Gør din netbutik mere attraktiv med teknologi facetteret Facetteret - dvs. foruddefineret. Søg. skab facetindekser og fremskynde søgningen efter produkter og hele katalogets arbejde betydeligt.

Bemærk: Den facetterede søgemaskine er tilgængelig fra version 15.0.1 af modulet Informationsblokke og integreret med komponent Komponent- dette er en programkode designet i en visuel skal, der udfører en specifik funktion af ethvert modul til at vise data i den offentlige del. Vi kan indlejre denne kodeblok på webstedets sider uden at skrive kode direkte. smart filter Komponenten forbereder et filter til at vælge fra infoblokken og viser filterformularen til filtrering af elementer. Komponenten skal tilsluttes før katalogelementets outputkomponent, ellers vil listen over varer ikke blive filtreret. Komponenten er standard, inkluderet i moduldistributionssættet og indeholder tre skabeloner: .Standard, visuel_vandret og visuel_lodret. (De sidste to mønstre understøttes ikke og efterlades af kompatibilitetsårsager.)

I den visuelle editor er komponenten placeret langs stien Indhold > Katalog > Smart Filter.

Komponenten hører til modulet Information Blocks.

Lær mere om facetteret søgning

Lad os skabe facetindekser i et par enkle trin:

Skal jeg genskabe facetterede indekser?

Faceterede indekser genskabes automatisk, eller du skal genskabe dem manuelt, afhængigt af de udførte handlinger:

Automatisk Tilføjet nye eller redigeret eksisterende Produkter.
ikke skabe nye ejendomme.
Manuelt Systemet vil bede dig med en besked øverst på siderne
administrative afsnit.
Tilføjet nyt eller redigeret mappesektioner.
Når du tilføjer en ny ejendom eller sletter en ejendom fra smart filter.
Ved aflæsning af varer fx fra 1C, hvis godset skab nye ejendomme.

Facetteret søgning forbedrer arbejdet med produktkataloget. For at bruge det har du brug for:

  1. Opret facetterede indekser til produktkataloget;
  2. Hold øje med en advarsel om behovet for manuelt at genopbygge indekser.

Facetteret navigation er et problem for alle e-handelssider. Et for stort antal sider, der bruges til forskellige variationer af det samme element, udgør en trussel mod effektiviteten af ​​søgningen. Dette kan påvirke SEO og brugeroplevelsen negativt. Hvad er facetteret navigation, og hvordan man forbedrer det, fortalte eksperter fra SEO Hacker-bloggen.

Facetteret navigation: definition

Denne type navigation findes normalt i sidebarerne på e-handelssider, indeholder filtre og facetter - muligheder som brugeren konfigurerer som ønsket. giver kunder i onlinebutikker mulighed for at søge efter et ønsket produkt ved hjælp af en kombination af attributter, der filtrerer produkter, indtil brugerne finder det, de har brug for.

Facetter og filtre er forskellige. Her er forskellen:

  • Facetter er indekserede kategorier. De hjælper med at forfine produktlister og fungerer som en forlængelse af hovedkategorierne. Facetter tilføjer en unik værdi for hvert valg, brugeren træffer. Da facetterne er indekseret, skal de sende relevante signaler til søgemaskinen og sikre, at siden indeholder alle de vigtige attributter.

  • Filtre bruges til at sortere og forfine elementer i lister. De er nødvendige for brugere, men ikke for søgemaskiner. Filtre indekseres ikke, fordi de ikke ændrer indholdet på siden, de sorterer det bare i en anden rækkefølge. Dette resulterer i, at flere URL'er har duplikeret indhold.

Potentielle problemer

Hver mulig facetkombination har sin egen unikke URL. Det kan give nogle problemer i forhold til SEO. Her er de vigtigste:

  • Dubleret indhold.
  • Bruger et budget på scanning.
  • Eliminer linkforskelle.

Efterhånden som dit websted vokser, vokser antallet af duplikerede sider også. Indgående links kan gå til forskellige duplikerede sider. Dette reducerer værdien af ​​links og begrænser muligheder for sideplacering.

Det øger også sandsynligheden for kannibalisering af søgeord. Flere sider forsøger at rangere for de samme søgeord, hvilket resulterer i mindre stabile og lavere placeringer. Dette problem kunne undgås, hvis hvert søgeord kun målrettede en enkelt side.

Løsninger til facetteret navigation

Når du vælger en løsning på problemet med facetteret navigation, skal du huske dit ultimative mål: øge antallet af indekserede sider eller reducere antallet af sider, som du ikke ønsker at blive indekseret. Her er nogle løsninger, der kan være nyttige for dig:

AJAX

Hvis du bruger AJAX, oprettes der ikke en ny URL, når brugeren klikker på en facet eller et filter. Fordi der ikke vil være unikke URL'er for alle mulige kombinationer af facetter, er problemet med duplikeret indhold, søgeordskannibalisering og udgifter til indeksering potentielt elimineret.

AJAX kan kun være effektiv før lanceringen af ​​en e-handelsside. Det bruges ikke til at løse problemerne med allerede eksisterende ressourcer. Denne metode kræver også visse udgifter fra din side.

noindex tag

Noindex-tagget bruges til at bede bots om at ekskludere en bestemt side fra indekset. Derfor vises det ikke i Googles søgeresultater. Dette reducerer mængden af ​​duplikeret indhold, der vises i indekset og søgeresultaterne.

Dette løser ikke problemer med crawl-budgettet, fordi bots stadig vil besøge din side. Det hjælper heller ikke med at distribuere linkværdi.

rel=kanonisk attribut

Med denne egenskab fortæller du Google, at du har én foretrukken hovedside at indeksere og rangere, og at alle andre indholdsversioner fra den side kun er dubletter, der ikke skal indekseres.

Sofia Ibragimova

Indholdsmarkedsfører

Hvis den samme side på dit websted kan tilgås fra flere webadresser, vil søgemaskinecrawlere behandle hver webadresse som en separat side. Bots vil beslutte, at indholdet på dit websted ikke er unikt, og dette vil negativt påvirke rangeringen og sænke din placering i SERP. For at undgå dette skal du angive den kanoniske hovedside ved at indsætte følgende tegnsekvens i HEAD-blokken:

Du kan bruge kanoniske sider til at løse problemet med duplikeret indhold, og delelinket vil blive flettet sammen med din hovedside. Men der er en chance for, at bots stadig vil crawle duplikerede sider, og det er spild af crawl-budget.

Robots.txt

Hvis du lukker nogle af siderne fra indeksering, kan du opnå gode resultater. Dette er en enkel, hurtig og pålidelig måde. Det er mest praktisk at indstille en brugerdefineret mulighed for at angive alle mulige kombinationer af facetter og filtre, som du vil blokere. Inkluder det i slutningen af ​​hver URL, du vil skjule (http://fuldsideadresse/robots.txt), eller brug Robots-metatagget i HEAD-området i sidekoden.

Når du ændrer URL'en, skal du huske, at det tager 3-4 uger for robotter at bemærke disse ændringer og reagere på dem.

Også her er der visse problemer. Værdien af ​​links vil være begrænset, og også den blokerede URL kan blive indekseret på grund af tilstedeværelsen af ​​eksterne links.

Google Search Console

Dette er en fantastisk måde at midlertidigt løse dine problemer, mens du arbejder på at opbygge et bedre og mere brugervenligt navigationssystem. Du kan bruge Google Search Console til at fortælle søgemaskinen, hvordan den skal crawle dit websted.

  • Log ind på din konsolkonto, og vælg afsnittet Crawl:

  • Klik på knappen "URL Parameters":

  • Angiv effekten af ​​hver af dine parametre på siden, og hvordan Google skal behandle disse sider.

Husk, at denne metode kun skjuler duplikeret indhold fra Googles crawlere. Bing- og Yahoo-sider vil stadig dukke op.

Hvordan man forbedrer facetteret navigation

Lad os kort overveje alle de metoder, der giver dig mulighed for at oprette den korrekte facetterede navigation:

  • Bruger AJAX
  • Fjern eller skjul links til kategorier eller filtreringssider, der ikke har noget indhold.
  • Tillad indeksering af visse kombinationer af facetter, der har en høj søgevolumen af ​​trafik
  • Etabler webstedshierarki gennem brødkrummer i kategorier og underkategorier.
  • Oprettelse af kanoniske (hoved) sider til duplikeret indhold.
  • Konsolidering af indekseringsegenskaber fra komponentsider til hele rækken ved hjælp af sidemarkering med rel = "next" og rel = "prev" .

Konklusion

Hver af de nævnte løsninger har sine fordele og ulemper. Der er ingen universel løsning, det hele afhænger af din virksomheds særlige forhold og den konkrete sag. Optimeret facetteret navigation vil give dit websted mulighed for at målrette mod et bredere udvalg af søgeord. For at undgå risiko skal du sørge for, at navigation ikke kun opfylder kravene til søgerobotter, men også er praktisk i forhold til brugeroplevelsen.

I dagens lektion vil vi forsøge at genskabe en simuleret facetteret (facetteret) søgning ved hjælp af Javascript. Jeg mener, at du allerede ved, hvad facetteret søgning er ved at læse denne tutorial, ellers google den eller tjek Amazon eller min demo.

Først skal vi bruge github.com/eikes/facetedsearch-biblioteket. Download den og inkluder filen facetedsearch.js i vores projekt. Vi skal også bruge jQuery- og Underscore-bibliotekerne.

Ansvarsfraskrivelse: Jeg forstår, at JQ ikke længere er en kage, men ved at bruge det som det sædvanlige syntaktiske sukker, kan du skære det i mere velkendte biblioteker eller vanilje JS.

Så lad os først lave en simpel markering med forbundne afhængigheder:

dokument

// Det er her, vi vil udlæse facetfiltrene
// Og her vil være vores elementer

Nu skal vi beskrive indstillingerne for vores applikation og oprette en skabelon til visning af array-elementer, som vi vil sortere ved hjælp af facetter:

Nå, opret faktisk selve JSON-arrayet med elementer, der skal vises i vores facetterede søgning i JS:

Var items = [ ( "firstname": "Mary", "efternavn": "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": "Løve", "continent": "Nordamerika"), ... ];

Jeg ville sætte dette array ind i en separat JS-fil, der ville blive dannet dynamisk, for eksempel fra databasen.

Det er alt, vi får facetteret søgning i JavaScript, og vi kan tilpasse det. Dernæst leverer jeg den oversatte dokumentation af biblioteket, hvor du kan kigge på de triggere, du har brug for.

Dokumentation

Funktioner

De to funktioner eksporteres til jQuery-navnerummet.

facetelize Bruges til at initialisere en facetteret søgning med de givne indstillinger.

facetUpdate Kan bruges hvis du vil ændre facetopslagstilstanden udefra.

Objektindstillinger

elementer: En række elementer, der skal filtreres og sorteres i processen.

facetter: Et objekt, hvis nøgler svarer til elementnøgler og værdier, er overskriften for denne facet. Elementer vil blive filtreret baseret på, hvilken værdi de har for disse nøgler.

orderByOptions: Svarer til facetter, bortset fra at disse nøgle/værdi-par kun bruges til sortering. Når RANDOM-tasten er aktiveret, kan resultaterne randomiseres.

facetSelector: Dette er den vælger, der bruges til at finde den DOM-node, hvorfra facetfiltrene er valgt.

resultSelector: Dette er den vælger, der bruges til at finde den DOM-node, hvor resultaterne vises.

resultTemplate: En streng, der bruges af Underscore-skabelonmotoren til at gengive hvert element fra elementarrayet. Følgende attributter tilføjes til hvert element, der også kan bruges i en skabelon: batchItemNr , batchItemCount , og totalItemCount .

tilstand: Dette objekt gemmer de aktuelle filtre, sorterer: currentResult og andre. Du kan angive en orderBy-streng eller et filterobjekt for at prækonfigurere dem.

enablePagination: Boolean for at aktivere paginering og knappen "indlæs mere", sand som standard.

paginationCount: Hvis paginering er aktiveret, indstiller antallet af elementer pr. side, standard er 50.

facetSortOption: Brug denne funktion til at ændre rækkefølgen af ​​facetelementer. Tager et objekt, hvor tasterne svarer til facetnavnene og værdierne, ind i en række facetværdier, som kan arrangeres i den rækkefølge, du gerne vil se dem. Dette eksempel vil sortere kontinenterne i en anden rækkefølge, de elementer, der ikke er inkluderet i arrayet, vil blive tilføjet i alfabetisk rækkefølge:

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

Der er flere skabeloner. Se venligst facetedsearch.js kildekode for at se alle tilgængelige skabelonindstillinger.

Begivenheder

Du kan binde dig til nogle begivenheder, der skal sende meddelelser, når en handling har fundet sted. For at gøre dette bruger vi jQuery-hændelsessystemet:

facetuicreated: Du kan binde denne funktion til DOM-elementet settings.facetSelector, som skal have besked, når brugergrænsefladen er blevet oprettet.

facetedsearchresultupdate: Du kan binde denne funktion til settings.resultSelector DOM-elementet for at få besked om opdateringsresultaterne.

facetedsearchfacetclick: Denne hændelse udløses, når der klikkes på en facet og udløses på settings.facetSelector-elementet. Som modtager facet-id'et som et argument.

facetedsearchorderby: Denne hændelse udløses, når sorteringselementet klikkes på settings.facetSelector-elementet. Den modtager ID-ordren som et argument.

$(settings.resultSelector).bind("facetedsearchresultupdate", function()( // gør noget, måske ));

Indbygget facetteret søgning

Indbygget i produktet

Den facetterede søgning indbygget i netbutikken – intern søgning – fungerer hurtigt på mange måder og belaster ikke systemet.

  • Indbygget i produktet
  • Meget hurtig
  • Hjemmesiden indlæses ikke
  • Det er hoveddelen af ​​infoblocks API
  • Kræver ikke redesign af websteder
  • Genindekseres automatisk
Hvorfor er det meget hurtigt?

Klienten viser øjeblikkeligt forhåndsforberedte søgeresultater - for enhver kombination af parametre - facet. Systemet forudberegner facetter for produktet - alle mulige skæringer af disse egenskaber i filteret. Disse færdiglavede søgesæt udstedes derefter til kunderne.

Hvorfor indlæses siden ikke?

På tidspunktet for udsendelse af resultatet til klienten sker der ingen beregninger, da resultatet allerede er klar. En facet til et nyt produkt oprettes straks, når det tilføjes til salgskataloget. Søgningen genindekseres automatisk baseret på nye produkter og nye funktioner.

Fordele for kunder

Fordele ved facetteret søgning

Din klient finder produktet meget hurtigt og leger nemt med filterindstillingerne. Klienten venter ikke og modtager øjeblikkeligt resultatet. Søgehastigheden afhænger ikke af antallet af varer i kataloget.


Smart Filter 2.0

Kunden finder hurtigt produktet

Din kunde finder et produkt meget hurtigt ved konsekvent at indsnævre søgeforespørgslen. Og ved hvert trin modtager han øjeblikkeligt resultater - en liste over produkter på anmodning. Han skal ikke vente på, at hans anmodning bliver behandlet. Fordi systemet har beregnet alle mulige muligheder på forhånd, og blot udsteder blanks. Gradvist producerer netbutikken færre og færre produkter som resultater. Disse produkter kommer tættere og tættere på kundens ønske.

Interaktivitet og multidimensionalitet

Valget af varer for køberen ligner et spil. Klienten trækker parametre (pris, vægt), skifter egenskaber (farve, størrelse), sætter yderligere betingelser (mærke, materiale, smag osv.) - og systemet genopbygger straks resultaterne. Samtidig kan der være et hvilket som helst antal justerbare parametre - deres antal påvirker ikke hastigheden til at generere resultatet.

Bekvemmelighed og venlighed

Med facetteret navigation kan selv en uerfaren bruger nemt hente et produkt i butikken. Det er meget praktisk at manipulere søgeværktøjer. Derudover beder systemet køberen om alle de parametre, hvormed han kan vælge et produkt. Butikken demonstrerer, som det var, for kunden produktets vigtigste egenskaber.

Kunden venter ikke på, at anmodningen bliver behandlet!
For eksempel køber din kunde et kamera. I første omgang angiver han kun 3 parametre i det smarte filter: pris, mærke, størrelse. Hans facet omfatter 3 kryds, der er mange søgeresultater, men klienten modtager dem med det samme. Klienten sætter vægten - han har brug for en let gadget. Systemet giver ham straks, uden forsinkelse, en mindre vareliste. Klienten indstiller skærmstørrelsen og angiver derefter den ønskede funktionalitet. Foran ham - de ønskede varer.


Søgehastighed

Søgehastighed betyder noget

Søgehastigheden påvirker antallet af køb

Intet irriterer en kunde som at have problemer med at finde produkter på dit websted. Kunden vil tage til andre butikker, hvis han søger for længe. Også selvom din butik indeholder et stort udvalg af produkter og mange værktøjer til at filtrere dem. Kunden kan ikke vente på resultatet af anmodningen.


Videotutorial: Hvorfor facetteret søgning fremskynder det smarte filter mange gange
Brug af en "facet" fremskynder søgningen inde i butikken med en størrelsesorden. Samtidig afhænger hastigheden ikke af antallet af elementer i kataloget.

Hvorfor er søgningen for langsom?
At søge efter et produkt i en butiksfacade kan tage betydeligt længere tid end normale sideindlæsningstider. Især hvis der er et stort antal varer i butikken og disse varers egenskaber. En søgeforespørgsel efter mange parametre skaber en masse databasekald og belaster webstedet betydeligt. Hvis der er mange kunder og forespørgsler, bremses søgningen mærkbart.

Arbejdshastigheden er imponerende!

Testresultaterne af version 15.0 af produktet på tre kategorier af kataloger indeholdende 500.000 varer viste, at sammenlignet med tidligere versioner:
  • Smart filterkomponent - 15 gange hurtigere!
  • Katalogkomponent - 5 gange hurtigere!
Søgeintelligens forbliver konstant!

Hurtigt selv uden "facet"!

Produktet arbejder konstant på at accelerere selve katalogkomponenterne. Site Speed ​​​​tjenesten viser en betydelig stigning i hastigheden fra version til version!

Rekonstruktion

Indeksering og søgeresultater bliver konstant rekonstrueret. Indholdsindekseringsalgoritmen bliver omarbejdet og accelereret. Kvaliteten af ​​præsentationen af ​​søgeresultater forbedres - især er "støjen" reduceret. Udviklerne planlægger at vise personlige data for den aktuelle klient i søgeresultaterne.

Udviklere: API-gennemsigtighed


tidligere opfattelse

Facet er API-gennemsigtig

Den "facet", der er indbygget i produktet, er gennemsigtig for API'et. Det er hoveddelen af ​​infoblocks API. Derfor kræver det ikke yderligere indsats for udviklere at bruge det. Det kræver heller ikke redesign af websteder.
  • Acceleration af CIBlockElement::GetList-metoden
  • Fuld integration med smart filter
GetList er nu hurtigere, fordi den automatisk inkluderer en "facet" til at fungere. Der er også en separat API på D7.

Fuld integration med smart filter

Nu kan du ved at lave indstillinger i den administrative del ikke kun indstille aktiviteten for produktegenskaber - om du vil deltage i det smarte filter eller ej. Ved at videregive en ejendom til et Smart Filter kan du med det samme vælge, hvordan du vil vise dem. I hvilken form skal ejendommen vises til kunder: knapper, størrelser, skydere, rullelister, lister med valg af farve osv.



Vis ejendom i Smart Filter

Kan tilpasses!

Smart filter ser nu smukkere ud. Udviklere kan nemt tilpasse og yderligere tilpasse dets udseende.