Фасетно търсене. PINQ - запитвани набори от данни

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

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

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

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

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

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

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

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

( "взе": 153, "timed_out": невярно, "_shards": ( "общо": 5, "успешно": 5, "неуспешно": 0), "попадения": ( "общо": 3, "max_score ": 0, "посещения": ["..."]), "агрегации": ( "all_products": ( "doc_count": 21, "филтрирани категории": ( "doc_count": 13, "categories": ( "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ ( "key": "films", "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), ( "key": "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" => $value , "boost" => 1 ] ) , ] ) ) ; $filter = QueryHelper::should ($nested) ;

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

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

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

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

Научете повече за фасетното търсене

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

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

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

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

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

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

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

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

Фасетното търсене, вградено в онлайн магазина - вътрешно търсене - работи бързо в много отношения и не натоварва системата.

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

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

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

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

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

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

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


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

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

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

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

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

Удобство и приветливост

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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


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

„Facet“ е прозрачен за API

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

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

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



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

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

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

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

И така, нека да преминем директно към инсталирането и конфигурирането на модулите, от които се нуждаем

Първо ще трябва да изтеглим и инсталираме следните модули: API за търсене, API за търсене в база данни, API за обекти и изгледи.

На страницата с модули разрешаваме:

  • API за търсене
  • Търсете изгледи
  • Търсене в база данни
  • API на обекта
  • Изгледи
  • Изгледи UI
  • Ctools

Създаване на сървър за търсене

Хайде да отидем до Конфигурация > Търсене и метаданни > API за търсене(/admin/config/search/search_api) и щракнете Добавете сървър.
След това въведете името на сървъра в падащия списък Клас на обслужванеизбирам Услуга за база даннии запазете.

Създаване на индекс

Хайде да отидем до Конфигурация > Търсене и метаданни > API за търсене(/admin/config/search/search_api), щракнете Добавете сървър (Добавете индекс).
Въведете името на индекса в полето Тип артикул (тип артикул)изберете " Материал“, в полето сървъризбирам Сървър за база данни, щракнете Създаване на индекс.


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

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

Създаване на страница за търсене

Хайде да отидем до Структура > Изгледии щракнете Добавете нов изглед (Добавете нов изглед).
В новия изглед в падащия списък Покажи (Покажи)изберете индекса, който по-рано създадохме, попълнете останалите полета (име, заглавие и път), както е необходимо.


След това щракнете Запазете и конфигурирайте(Продължете и редактирайте)Настройте изгледа както обикновено. В критериите за филтриране добавих показване само на публикувани материали и желания тип възел и конфигурирах показването на необходимите полета (трябва да добавите тези полета към индекса, за да можете да филтрирате по тях).

На този етап сме готови с настройката на изгледа, сега нека преминем директно към филтъра за аспекти.

A/search_api_ranges.module +++ b/search_api_ranges.module @@ -144.11 +144.8 @@ функция search_api_ranges_minmax($variables, $order = "ASC") ( // в противен случай нашият min/max винаги ще бъде равен на въведеното от потребителя. $filters = &$query->getFilter()->getFilters(); foreach ($filters as $key => $filter) ( - - // Проверка за масив: филтрите в стар стил са обекти, които можем да пропуснем. - if (is_array) ($filter)) ( - if ($filter == $variables["range_field"] || ($filter != $variables["range_field"] && $filter == "")) ( - $ current_filter = $filters [$key]; + if(isset($filter->tags) && is_array($filter->tags))( + if(in_array("facet:".$variables["range_field"], $ filter->tags ))( unset($filters[$key]); ) )

Корекция на JQuery UI Slider: настройка на пренасочване

Във версия 7x-1.5 на модула се сблъсках с факта, че ако джаджата на плъзгача се намираше на страница, различна от страницата за търсене, тогава след промяна на ценовия диапазон посоката беше пренасочена към текущата страница, а не към страницата за търсене страница.
Грешката е във функцията search_api_ranges_block_slider_view_form_submit()(файл search_api_ranges.module, ред 364).
Наистина не разгледах какво има там и защо, просто промених малко кода на ред 427:

Drupal_goto($path, array("query" => array($params), "language" => $language)); + drupal_goto($values["path"], array("query" => array($params), "language" => $language));

след което проблемът беше решен.

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

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

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

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

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

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

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

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

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

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

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

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

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

AJAX

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

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

noindex таг

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

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

Атрибутът rel=canonical

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

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

Маркетинг на съдържание

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

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

Robots.txt

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

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

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

Google Search Console

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

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

  • Кликнете върху бутона „URL параметри“:

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

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

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

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

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

Заключение

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