Фасетирано търсене. PINQ - Анкетирани набори от данни. Фасетирано търсене. Ние задаваме аспектите и показваме първоначалните данни

("заявка": ("и": [("термини": ("държава": ["be", "fr"])), ("термини": ("категория": ["книги", "филми "]))))))

За броячи можем да използваме вградени агрегати от Elasticsearch. Всеки от двата аспекта се съхранява като едно поле в индекса, така че можем да обобщим термините във всяко от тези полета. Агрегацията ще върне брояча за стойността на това поле.

("заявка": ("и": [("термини": ("държава": ["be", "fr"])), ("термини": ("категория": ["книги", "филми "]))])," обобщения ": (" държави ": (" термини ": (" поле ":" държава "))," категории ": (" термини ": (" поле ":" категория ") )))

Ако следвате тази заявка, ще забележите, че броячите са деактивирани. Двете неизбрани държави, Португалия и Бразилия, имат брояч 0. Въпреки че има реални резултати, ако искаме да ги изберем (поради вътрешния ръб ИЛИ). Това е така, защото по подразбиране Elasticsearch извършва своите агрегации върху набора от резултати. Това означава, че ако изберете Франция, филтрите на другата страна ще имат резултат 0, тъй като резултатният набор съдържа само елементи от Франция.

За да коригираме това, трябва да инструктираме Elasticsearch да агрегира целия набор от данни, игнорирайки заявката. Можем да направим това, като дефинираме нашите клъстери като глобални.

("заявка": ("и": [("термини": ("държава": ["be", "fr"])), ("термини": ("категория": ["книги", "филми "]))])," обобщения ": (" all_products ": (" глобални ": ()," агрегирания ": (" държави ": (" термини ": (" поле ":" държава "))," категории ": (" термини ": (" поле ":" категория "))))))

Ако просто направихме това, нашите броячи винаги биха били едни и същи, защото винаги ще разчитат на целия набор от данни, независимо от нашите филтри. Нашите агрегати трябва да станат малко по-сложни, за да работи това, трябва да добавим филтри към тях. Всяко агрегиране трябва да разчита на набор от данни с всички приложени филтри с изключение на неговия собствен. По този начин обобщаването по акаунт във Франция разчита на набор от данни, използващ филтър за категории, но не и филтър за държава:

("заявка": ("и": [("термини": ("държава": ["be", "fr"])), ("термини": ("категория": ["книги", "филми "]))])," обобщения ": (" all_products ": (" глобални ": ()," агрегирания ": (" държави ": (" филтър ": (" и ": [(" термини ": ( "категория": ["книги", "филми"]))]), "агрегации": ("filtered_countries": ("термини": ("поле": "страна")))), "категории": ( "filter": ("и": [("terms": ("country": ["be", "fr"]))]), "aggregations": ("filtered_categories": ("terms": (" поле ":" категория "))))))))))

("взето": 153, "timeed_out": false, "_shards": ("общо": 5, "успешно": 5, "неуспешно": 0), "попадения": ("общо": 3, "max_score ": 0," удари ": [" ... "])," обобщения ": (" all_products ": (" doc_count ": 21," филтрирани категории ": (" doc_count ": 13," категории ": ( "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [("key": "movies", "doc_count": 6), ("key": "music", "doc_count": 4), ( "key": "книги", "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), ( "ключ": "pt", "doc_count": 2)))]))))

Yii2 рамка

$terms = QueryHelper :: terms ("categories.name", "my category"); $ nested = QueryHelper :: вложен ("string_facet", QueryHelper :: филтър ([QueryHelper :: термин ("string_facet.facet_name", ["value" => $ id, "boost" => 1]), QueryHelper :: термин ("string_facet.facet_value", ["value" => $ стойност, "boost" => 1]),])); $ filter = QueryHelper :: трябва ($ вложен);

Съвременният човек се опитва да отделя все по-малко време за покупки. Бавните продуктови каталози отблъскват клиентите, магазинът губи клиенти и част от печалбите си. Направете вашия онлайн магазин по-привлекателен с технологии фасетиран Фасетиран – т.е. предварително дефиниран.Търсене. Създайте фасетирани индексии значително ускоряват търсенето на стоки и работата на целия каталог.

Забележка:Фасетната търсачка е налична от версия на модула 15.0.1 Информационни блоковеи интегриран с съставна част Съставна часте програмен код, проектиран във визуална обвивка, която изпълнява специфична функция на всеки модул за показване на данни в публичната част. Можем да вмъкнем този блок от код в страниците на сайта, без директно да пишем код. Интелигентен филтър Компонентът подготвя филтър за избор от информационен блок и показва филтърна форма за филтриращи елементи. Компонентът трябва да бъде свързан преди компонента за показване на каталожни артикули, в противен случай списъкът с артикули няма да бъде филтриран. Компонентът е стандартен, включен е в комплекта за разпространение на модула и съдържа три шаблона: .по подразбиране, визуален_хоризонталени визуален_вертикален... (Последните два шаблона не се поддържат, остават за поддържане на съвместимост.)

Във визуалния редактор компонентът се намира по протежение на пътя Съдържание> Каталог> Интелигентен филтър.

Компонентът принадлежи към модула Информационни блокове.

Повече за фасетното търсене

Да създаваме фасетирани индексив няколко прости стъпки:

Трябва ли да се пресъздават фасетирани индекси?

Фасетираните индекси се пресъздават автоматично или трябва да ги пресъздадете ръчно, в зависимост от извършените действия:

Автоматично Добавени нови или редактирани съществуващи стоки.
не създавайтенови имоти.
Ръчно Системата ще ви подкани за това със съобщение в горната част на страниците.
административен раздел.
Добавено ново или редактирано каталожни секции.
При добавяне на нов или премахване на свойство от интелигентен филтър.
При разтоварване на стоки, например, от 1C, ако стоките създавайнови имоти.

Фасетираното търсене подобрява производителността на продуктовия каталог. За да го използвате, трябва:

  1. Създаване на фасетирани индекси за продуктовия каталог;
  2. Следете за известие, за да създадете ръчно отново индекси.

Фасетираната навигация е проблем за всички сайтове за електронна търговия. Прекомерният брой страници, които се използват за различни варианти на един и същ елемент, застрашават ефективността на търсенето. Това може да повлияе негативно на SEO и потребителското изживяване. Какво е фасетирана навигация и как да я подобрим според експерти от блога SEO Hacker.

Фасетирана навигация: определение

Този тип навигация обикновено се намира в страничните ленти на сайтовете за електронна търговия, съдържа филтри и аспекти - параметри, които потребителят може да персонализира, както пожелае. позволява на клиентите на онлайн магазина да търсят желания продукт, използвайки комбинация от атрибути, които ще филтрират продуктите, докато потребителите намерят това, което искат.

Фасетите и филтрите са различни един от друг. Ето разликата:

  • Фасетите са индексирани категории. Те помагат за прецизиране на списъците с продукти и действат като разширение на основните категории. Фасетите добавят уникална стойност към всеки избор, който потребителят прави. Тъй като аспектите са индексирани, те трябва да изпращат подходящи сигнали до търсачката, като гарантират, че страницата съдържа всички важни атрибути.

  • Филтрите се използват за сортиране и прецизиране на елементи в списъци. Те са необходими за потребителите, но не и за търсачките. Филтрите не се индексират, защото не променят съдържанието на страницата, а просто я сортират в различен ред. Това води до множество URL адреси с дублирано съдържание.

Потенциални проблеми

Всяка възможна комбинация от аспекти има свой собствен уникален URL адрес. Това може да причини някои проблеми от гледна точка на SEO. Ето основните от тях:

  • Дублирано съдържание.
  • Загуба на бюджет за сканиране.
  • Премахнете разликата във връзките.

С нарастването на вашия сайт се увеличава и броят на дублираните страници. Входящите връзки могат да отидат към различни дублиращи се страници. Това намалява стойността на връзките и ограничава класирането на страниците ви.

Вероятността от канибализиране на ключови думи също се увеличава. Няколко страници се опитват да се класират за едни и същи ключови думи, което води до по-малко последователно и по-ниско класиране. Този проблем можеше да бъде избегнат, ако всяка ключова дума беше предназначена само за конкретна страница.

Фасетирани решения за навигация

Когато решавате за решение на вашия проблем с фасетираната навигация, имайте предвид крайната си цел: да увеличите броя на страниците за индексиране или да намалите броя на страниците, които не искате да бъдат индексирани. Ето някои решения, които може да ви бъдат полезни:

AJAX

Ако използвате AJAX, не се генерира нов URL, когато потребителят щракне върху аспект или филтър. Тъй като няма да има уникални URL адреси за всяка възможна комбинация от аспекти, проблемът с дублираното съдържание, канибализацията на ключови думи и пропилените разходи за индексиране са потенциално елиминирани.

AJAX може да бъде ефективен само преди стартирането на сайта за електронна търговия. Не се използва за решаване на проблеми със съществуващите ресурси. Освен това този метод изисква определени разходи от ваша страна.

Таг без индекс

Тагът noindex се използва, за да каже на ботовете да изключат конкретна страница от индекса. Следователно няма да се появи в резултатите от търсенето с Google. Това помага да се намали количеството дублирано съдържание, което се появява в индекса и резултатите от търсенето.

Това няма да реши проблема с бюджета за обхождане, защото ботовете все още ще посещават страницата ви. Това също не помага за разпространението на стойността на връзката.

Rel = каноничен атрибут

С този атрибут вие казвате на Google, че имате една основна предпочитана страница за индексиране и класиране, а всички други версии на съдържанието от тази страница са просто дубликати, които не трябва да бъдат индексирани.

София Ибрагимова

Търговец на съдържание

Ако една и съща страница на вашия сайт може да бъде достъпна от множество URL адреси, роботите на търсачките ще третират всеки URL като отделна страница. Ботовете ще решат, че съдържанието на вашия сайт не е уникално, което ще се отрази негативно на класирането ви и ще понижи класирането ви. За да избегнете това, посочете главната канонична страница, като вмъкнете следната последователност от знаци в блока HEAD:

Можете да използвате канонични страници, за да разрешите проблема с дублираното съдържание и връзката към запасите ще бъде обединена с основната ви страница. Но има вероятност ботовете все още да обхождат дублиращи се страници, което е загуба на бюджет за обхождане.

Robots.txt

Затварянето на някои от страниците от индексиране ви позволява да постигнете добри резултати. Това е прост, бърз и надежден начин. Най-удобният начин е да зададете конфигурируем параметър, за да посочите всички възможни комбинации от аспекти и филтри, които искате да блокирате. Включете го в края на всеки URL адрес, който искате да скриете (http: // URL адрес на цяла страница / robots.txt), или използвайте мета маркера Robots в областта HEAD на кода на страницата.

Когато променяте URL адреса, имайте предвид, че на роботите са необходими 3-4 седмици, за да забележат и отговорят на тези промени.

Тук също има определени проблеми. Стойността на връзките ще бъде ограничена и блокираният URL може да бъде индексиран поради наличието на външни връзки.

Google Search Console

Това е чудесен начин временно да решите проблемите си, докато работите върху по-добра, по-удобна за потребителя навигационна система. Можете да използвате Google Search Console, за да кажете на търсачката как да обхожда вашия сайт.

  • Влезте в акаунта си в конзолата и изберете секцията Обхождане:

  • Щракнете върху бутона URL параметри:

  • Посочете въздействието на всеки от вашите параметри върху страницата и как Google трябва да обработва тези страници.

Не забравяйте, че този метод крие само дублирано съдържание от роботите на Google. Bing и Yahoo ще продължат да показват страници.

Как да подобрим фасетираната навигация

Нека да разгледаме набързо всички методи, които ви позволяват да създадете правилна фасетирана навигация:

  • Използване на AJAX
  • Премахнете или скрийте връзки към категории или филтрирайте страници, на които липсва съдържание.
  • Позволява индексиране на определени комбинации от аспекти, които имат голям обем трафик на търсене
  • Задаване на йерархия на сайта чрез галери в категории и подкатегории.
  • Създаване на канонични (основни) страници за дублирано съдържание.
  • Консолидирайте свойствата на индексиране от страниците на компонентите към цял ред, като използвате маркиране на страницата с rel = "следващ" и rel = "prev".

Заключение

Всяко от посочените решения има своите предимства и недостатъци. Няма универсално решение, всичко зависи от спецификата на вашия бизнес и конкретния случай. Оптимизираната фасетирана навигация ще позволи на вашия сайт да се насочи към по-широк набор от ключови думи. За да избегнете риск, уверете се, че навигацията ви е не само отзивчива към обхождащите машини, но и удобна за потребителя.

В днешния урок ще се опитаме да пресъздадем имитацията на фасетно (фасетно) търсене с помощта на Javascript. Предполагам, че вече знаете какво е фасетирано търсене, тъй като четете този урок, в противен случай го потърсете в Google или разгледайте Amazon или моята демонстрация.

Първо, имаме нужда от библиотеката github.com/eikes/facetedsearch. Изтеглете го и включете файла facetedsearch.js към нашия проект. Нуждаем се и от библиотеките jQuery и Underscore.

Опровержение:Разбирам, че JQ вече не е торта, но го използвам като позната синтактична захар, можете да го видите под вашите по-познати библиотеки или във ванилия JS.

И така, първо, нека направим проста маркировка със свързани зависимости:

документ

// Това е мястото, където ще изведем фасетните филтри
// И тук ще бъдат нашите елементи

Сега трябва да опишем настройките на нашето приложение и да създадем шаблон за показване на елементи от масива, които ще сортираме с помощта на аспекти:

Е, всъщност създайте самия JSON масив с елементи, които да се показват в нашето фасетно търсене в JS:

Var items = [("firstname": "Mary", "lastname": "Smith", "imageURL": "http://lorempixel.com/150/150/cats/2", "description": "Sed Ea Amet. Stet Voluptua. Nonumy Magna Takimata "," категория ":" Мишка "," език ": [" Smalltalk "," XSLT "]," континент ":" Африка "), (" първо име ":" Патриша ", "lastname": "Johnson", "imageURL": "http://lorempixel.com/150/150/cats/3", "description": "Ut Takimata Sit Aliquyam Labore Aliquyam Sit Sit Lorem Amet. Ipsum Rebum." , "категория": "Лъв", "континент": "Северна Америка"), ...];

Бих поставил този масив в отделен JS файл, който ще се генерира динамично, от база данни, например.

Това е всичко, получаваме фасетирано търсене в JavaScript и можем да го персонализираме. След това представям преведената библиотечна документация, където можете да шпионирате тригерите, от които се нуждаете.

Документация

Функции

Две функции се експортират в пространството от имена на jQuery.

facetelize Използва се за инициализиране на фасетирано търсене с посочените настройки.

facetUpdate Може да се използва, когато искате външно да промените състоянието на фасетно търсене.

Настройки на обекта

елементи: масив от елементи, които да бъдат филтрирани и сортирани в процеса.

аспекти: Обектът, за който ключовете съответстват на ключовете и стойностите на елемента, е заглавието на този аспект. Елементите ще бъдат филтрирани въз основа на стойността, която имат за тези ключове.

orderByOptions: Подобно на фасетите, с изключение на това, че тези двойки ключ-стойност се използват само за сортиране. Когато превключвателят RANDOM е включен, резултатите могат да бъдат рандомизирани.

facetSelector: Това е селектор, който се използва за намиране на DOM възела, от който да изберете филтрите за аспекти.

resultSelector: Това е селектор, който се използва за намиране на DOM възела, където се показват резултатите.

resultTemplate: Низ, който се използва от модула за шаблони за долно подчертаване за изобразяване на всеки елемент в масива с елементи. Следните атрибути се добавят към всеки елемент, който също може да се използва в шаблон: batchItemNr, batchItemCount и totalItemCount.

състояние: Този обект съхранява текущите филтри, сортира: currentResult и други. Можете да предоставите низ orderBy или обект за филтри, за да ги конфигурирате предварително.

enablePagination: Булев за активиране на страницата и бутона „зареди повече“, вярно по подразбиране.

paginationCount: Ако е активиран paginator, задава броя на елементите на страница, по подразбиране е 50.

facetSortOption: Използвайте тази функция, за да промените реда на елементите на аспекта. Приема обект, в който ключовете съответстват на имена на аспекти и стойности в масив от стойности на аспекти, които могат да бъдат подредени в реда, в който искате да бъдат. Този пример ще сортира континентите в различен ред, добавяйки елементи, които не са включени в масива, по азбучен ред:

FacetSortOption: ("континент": ["Северна Америка", "Южна Америка"])

Има още няколко шаблона, моля, вижте изходния код на facetedsearch.js, за да видите всички налични опции за шаблони.

Развития

Можете да се свържете с някои събития, които трябва да изпращат известия, когато е извършено някакво действие. За това използваме системата за събития jquery:

facetuicreated: Можете да свържете тази функция към DOM елемент settings.facetSelector, който трябва да бъде уведомен, когато потребителският интерфейс е създаден.

facetedsearchresultupdate: Можете да свържете тази функция към DOM елемент settings.resultSelector, за да бъдете уведомени за резултата от актуализацията.

facetedsearchfacetclick: Това събитие се задейства, когато се щракне върху фасет и се задейства върху елемента settings.facetSelector. Което получава идентификатор на аспект като аргумент.

facetedsearchorderby: Това събитие се издига при щракване върху елемент за сортиране върху елемента settings.facetSelector. Получава идентификатора на поръчката като аргумент.

$ (settings.resultSelector) .bind ("facetedsearchresultupdate", функция () (// направи нещо, може би));

Вградено фасетно търсене

Вграден в продукта

Вграденото в онлайн магазина фасетно търсене – вътрешно търсене – работи бързо по много параметри и не натоварва системата.

  • Вграден в продукта
  • Много бързо
  • Не зарежда сайта
  • Това е основната част от API на информационния блок
  • Не изисква редизайн на уебсайт
  • Автоматично преиндексирано
Защо много бързо?

На клиента незабавно се представят предварително подготвени резултати от търсене - за всяка комбинация от параметри - аспект. Системата изчислява предварително фасетите за продукта - всички видове пресечни точки на тези свойства във филтъра. След това тези готови комплекти за търсене се раздават на клиентите.

Защо не зарежда сайта?

Когато резултатът се върне на клиента, не се извършва изчисление, тъй като резултатът вече е готов. Фасет за нов продукт се създава веднага след добавянето му в търговския каталог. Търсенето се преиндексира автоматично въз основа на нови продукти и нови свойства.

Ползи за клиентите

Предимства на фасетното търсене

Вашият клиент намира продукт много бързо, като лесно си играе с настройките на филтъра. Клиентът не чака и получава резултата моментално. Скоростта на търсене не зависи от броя на артикулите в каталога.


Интелигентен филтър 2.0

Клиентът бързо намира продукта

Вашият клиент намира продукт много бързо, като постоянно стеснява заявката за търсене. И на всяка стъпка той незабавно получава резултати - списък с продукти при поискване. Не е нужно да чака молбата му да бъде обработена. Тъй като системата е изчислила всички възможни опции предварително и просто дава празни места. Постепенно онлайн магазинът дава все по-малко продукти като резултат. Тези продукти се доближават все повече и повече до заявката на купувача.

Интерактивност и многоизмерност

Изборът на продукт за клиента е като игра. Клиентът плъзга полетата с параметри (цена, тегло), превключва свойствата (цвят, размер), задава допълнителни условия (марка, материал, вкус и т.н.) и системата незабавно възстановява резултатите. В същото време може да има толкова регулируеми параметри, колкото искате - техният брой не влияе върху скоростта на формиране на резултата.

Удобство и дружелюбност

С фасетирана навигация дори неопитен потребител може лесно да намери продукт в магазин. Много е удобно да манипулирате инструментите за търсене. Освен това системата подсказва на купувача всички параметри, по които може да избере продукт. Магазинът като че ли демонстрира на клиента основните свойства на продукта.

Клиентът не чака заявката да бъде обработена!
Например, да кажем, че клиентът ви купува камера. Първоначално той посочва само 3 параметъра в интелигентния филтър: цена, марка, размер. Фасетът му съдържа 3 пресечки, има много резултати от търсенето, но клиентът ги получава веднага. Клиентът задава теглото - има нужда от лека джаджа. Системата незабавно, без забавяне, му дава по-малък списък със стоки. Клиентът задава размера на екрана, след което посочва необходимата функционалност. Пред него са търсените стоки.


Скорост на търсене

Скоростта на търсене има значение

Скоростта на търсене влияе върху броя на покупките

Нищо не дразни клиента така, както проблемът с намирането на продукти на вашия сайт. Клиентът ще отиде в други магазини, ако търси твърде дълго. Дори ако вашият магазин съдържа голям избор от продукти и много инструменти за филтрирането им. Клиентът може да не чака резултатите от заявката.


Видео урок: Защо фасетираното търсене ускорява драстично интелигентния филтър
Използването на "фасет" ускорява търсенето в магазина с порядък. Освен това скоростта не зависи от броя на артикулите в каталога.

Защо търсенето е толкова бавно?
Търсенето на артикул в магазин може да отнеме значително повече време от нормалното време за зареждане на страницата. Особено когато има голям брой продукти в магазина и свойствата на тези продукти. Заявка за търсене по много параметри създава много обаждания към базата данни и значително натоварва сайта. Ако има много клиенти и заявки, търсенето се забавя значително.

Скоростта на работа е впечатляваща!

Резултатите от теста на версия 15.0 на продукта на три категории каталози, съдържащи 500 хиляди артикула, показаха, че в сравнение с предишни версии:
  • Интелигентен филтърен компонент - 15 пъти по-бърз!
  • Компонент от каталога - 5 пъти по-бързо!
Интелигентността за търсене остава постоянна!

Бързо дори и без фасет!

Продуктът непрекъснато работи за ускоряване на самите компоненти на каталога. Услугата "Скорост на сайта" показва значително увеличение на скоростта от версия на версия!

Реконструкция

В ход е непрекъснато възстановяване на индексирането и резултатите от търсенето. Алгоритъмът за индексиране на съдържанието се преработва и ускорява. Подобрява се качеството на представянето на резултатите от търсенето – по-специално се намалява „шумът“. Разработчиците планират да показват персонализирани данни за текущия клиент в резултатите от търсенето.

За разработчици: прозрачност за API


Предишен изглед

„Фасетът“ е прозрачен за API

„Фасетът“, вграден в продукта, е прозрачен за API. Това е основната част от API на информационния блок. Следователно не изисква допълнителни усилия за разработчиците, за да го използват. Освен това не се изисква преработка на уебсайта.
  • Ускоряване на метода CIBlockElement :: GetList
  • Пълна интеграция със смарт филтър
GetList вече е по-бърз, защото автоматично свързва "фасет" за функциониране. Има и отделен API на D7.

Пълна интеграция със смарт филтър

Сега, когато правите настройки в административната част, за свойствата на стоките, можете не само да зададете активността – дали да участвате или не в интелигентния филтър. Като предадете свойство на Smart Filter, можете веднага да изберете опцията за показването им. Как да покажете собствеността на клиентите: бутони, размери, плъзгачи, падащи списъци, списъци с избор на цвят и т.н.



Показване на собственост в интелигентен филтър

Подлежи на персонализиране!

Интелигентният филтър изглежда по-красив. Разработчиците могат лесно да персонализират и допълнително да персонализират външния му вид.