PINQ - Запитани набори от данни. Търсене на аспекти. Inline Facet Index JQuery UI Slider Patch: Настройка на пренасочване
( "заявка": ( "и": [ ( "условия": ("държава": ["be", "fr"])), ( "условия": ("категория": ["книги", "филми" "]) ) ] ))
За броячи можем да използваме вградените агрегати от Elasticsearch. Всеки от двата аспекта се съхранява като едно поле в индекса, така че можем да използваме агрегиране на термини във всяко от тези полета. Агрегирането ще върне брояч за стойността на това поле.
( "заявка": ( "и": [ ( "условия": ("държава": ["be", "fr"])), ( "условия": ("категория": ["книги", "филми" "]) ) ]), "агрегации": ( "държави": ( "термини": ("поле": "държава")), "категории": ( "термини": ("поле": "категория") ) ) )
Ако изпълните тази заявка, ще забележите, че броячите са деактивирани. Двете неизбрани държави, Португалия и Бразилия, имат брой 0. Въпреки че има действителни резултати, ако искаме да ги изберем (поради вътрешния край на ИЛИ). Това е така, защото по подразбиране Elasticsearch извършва своите агрегации върху набора от резултати. Това означава, че ако изберете Франция, другите филтри по държави ще имат резултат 0, тъй като наборът от резултати съдържа само елементи от Франция.
За да коригираме това, трябва да инструктираме Elasticsearch да извърши агрегирането на целия набор от данни, като игнорира заявката. Можем да направим това, като дефинираме нашите клъстери като глобални.
( "заявка": ( "и": [ ( "условия": ("държава": ["be", "fr"])), ( "условия": ("категория": ["книги", "филми" "]) ) ]), "агрегации": ( "всички_продукти": ( "глобално": (), "агрегации": ( "държави": ( "условия": ("поле": "държава")), " категории": ("термини": ("поле": "категория") ) ) ) ) )
Ако просто направихме това, нашите броячи винаги ще бъдат едни и същи, защото те винаги ще разчитат на целия набор от данни, независимо от нашите филтри. Нашите агрегати трябва да станат малко по-сложни, за да работи това, трябва да добавим филтри към тях. Всяко агрегиране трябва да разчита на набор от данни с всички приложени филтри, с изключение на своя собствен. Така че агрегирането за акаунт във Франция разчита на набора от данни с приложен филтър за категория, но не и филтъра за държава:
( "заявка": ( "и": [ ( "условия": ("държава": ["be", "fr"])), ( "условия": ("категория": ["книги", "филми" "]) ) ]), "агрегации": ( "всички_продукти": ( "глобално": (), "агрегации": ( "държави": ( "филтър": ( "и": [ ( "условия": ( "category": ["books","movies"]) ) ] ), "aggregations": ( "filtered_countries": ( "terms": ("field": "country") ) ) ), "categories": ( "filter": ( "and": [ ( "terms": ("country": ["be","fr"]) ) ] ), "aggregations": ( "filtered_categories": ( "terms": (" поле": "категория") ) ) ) ) ) ) )
( "взе": 153, "timed_out": невярно, "_shards": ( "общо": 5, "успешно": 5, "неуспешно": 0), "попадения": ( "общо": 3, "max_score ": 0, "hits": ["..."] ), "aggregations": ( "all_products": ( "doc_count": 21, "filtred category": ( "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:: трябва ($вложено) ;Фасетираната навигация е проблем за всички сайтове за електронна търговия. Прекомерният брой страници, които се използват за различни вариации на един и същи елемент, представлява заплаха за ефективността на търсенето. Това може да повлияе негативно върху SEO и потребителски опит. Какво е фасетна навигация и как да я подобрим, разказаха експерти от блога SEO Hacker.
Фасетна навигация: определение
Този тип навигация обикновено се намира в страничните ленти на сайтове за електронна търговия, съдържа филтри и аспекти - опции, които потребителят конфигурира по желание. позволява на клиентите на онлайн магазини да търсят желан продукт, използвайки комбинация от атрибути, които ще филтрират продуктите, докато потребителите намерят това, от което се нуждаят.
Фасетите и филтрите са различни. Ето разликата:
- Фасетите са индексирани категории. Те помагат за прецизиране на продуктовите списъци и действат като разширение на основните категории. Фасетите добавят уникална стойност за всеки избор, който потребителят прави. Тъй като фасетите са индексирани, те трябва да изпращат подходящи сигнали до търсачката, като гарантират, че страницата съдържа всички важни атрибути.
- Филтрите се използват за сортиране и прецизиране на елементи в списъците. Те са необходими за потребителите, но не и за търсачките. Филтрите не се индексират, защото те не променят съдържанието на страницата, те просто го сортират в различен ред. Това води до множество URL адреси с дублирано съдържание.
Потенциални проблеми
Всяка възможна комбинация от аспекти има свой собствен уникален URL адрес. Това може да причини някои проблеми по отношение на SEO. Ето основните от тях:
- Дублирано съдържание.
- Разходване на бюджет за сканиране.
- Премахнете разликите във връзката.
С нарастването на вашия сайт расте и броят на дублиращите се страници. Входящите връзки може да водят до различни дублирани страници. Това намалява стойността на връзките и ограничава възможностите за класиране на страницата.
Освен това увеличава вероятността от канибализация. ключови думи. Няколко страници се опитват да се класират за едни и същи ключови думи, което води до по-малко стабилно и по-ниско класиране. Този проблем може да бъде избегнат, ако всяка ключова дума е насочена само към една страница.
Решения за фасетна навигация
Когато избирате решение на проблема с фасетната навигация, имайте предвид крайната си цел: увеличаване на броя на индексираните страници или намаляване на броя на страниците, които не искате да бъдат индексирани. Ето някои решения, които може да са ви полезни:
AJAX
Ако използвате AJAX, нов URL адрес не се създава, когато потребителят кликне върху аспект или филтър. Тъй като няма да има уникални URL адреси за всяка възможна комбинация от аспекти, проблемът с дублираното съдържание, канибализацията на ключови думи и разходите за индексиране е потенциално елиминиран.
AJAX може да бъде ефективен само преди стартирането на сайт за електронна търговия. Не се използва за решаване на проблемите на вече съществуващи ресурси. Освен това този метод изисква определени разходи от ваша страна.
noindex таг
Тагът noindex се използва, за да каже на ботовете да изключат определена страница от индекса. Така че няма да се покаже в резултатите. Търсене в Google. Това намалява количеството дублирано съдържание, което се появява в индекса и резултатите от търсенето.
Това няма да реши проблемите с бюджета за обхождане, защото ботовете все още ще посещават страницата ви. Освен това не помага за разпределянето на стойността на връзката.
rel=каноничен атрибут
С този атрибут вие казвате на Google, че имате една основна предпочитана страница за индексиране и класиране и че всички други версии на съдържание от тази страница са просто дубликати, които не е необходимо да бъдат индексирани.
София Ибрагимова
Маркетинг на съдържание
Ако една и съща страница на вашия сайт може да бъде достъпна от множество URL адреси, роботите на търсачката ще третират всеки URL като отделна страница. Ботовете ще решат, че съдържанието на вашия сайт не е уникално и това ще повлияе негативно на класирането и ще понижи позицията ви в SERP. За да избегнете това, укажете главната канонична страница, като вмъкнете следната последователност от знаци в блока 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" .
Заключение
Всяко от споменатите решения има своите предимства и недостатъци. Няма универсално решение, всичко зависи от спецификата на вашия бизнес и конкретния случай. Оптимизираната фасетна навигация ще позволи на вашия сайт да насочва към по-широк набор от ключови думи. За да избегнете риск, уверете се, че навигацията не само отговаря на изискванията на роботите за търсене, но и е удобна по отношение на потребителското изживяване.
Съвременният човек се опитва да отделя все по-малко време за покупки. Бавните продуктови каталози отблъскват клиентите, магазинът губи клиенти и част от печалбата. Направете своя онлайн магазин по-привлекателен с технологиите фасетиран Фасетиран – т.е. предварително зададени.Търсене. Създавайте фасетни индексии значително ускоряват търсенето на продукти и работата на целия каталог.
Забележка:Фасетната търсачка е достъпна от версия 15.0.1 на модула Информационни блоковеи интегриран с компонент Компонент- това е програмен код, проектиран във визуална обвивка, която изпълнява специфична функция на всеки модул за показване на данни в публичната част. Можем да вградим този блок от код в страниците на сайта, без да пишем код директно. интелигентен филтър Компонентът подготвя филтър за избор от инфоблока и показва филтърната форма за филтриращи елементи. Компонентът трябва да бъде свързан преди изходния компонент на каталожния елемент, в противен случай списъкът с елементи няма да бъде филтриран. Компонентът е стандартен, включен в комплекта за разпространение на модула и съдържа три шаблона: .по подразбиране, визуален_хоризонталени визуален_вертикален. (Последните два модела не се поддържат и са оставени от съображения за съвместимост.)
AT визуален редакторкомпонентът е разположен по пътя Съдържание > Каталог > Интелигентен филтър.
Компонентът принадлежи към модула Информационни блокове.
Научете повече за фасетното търсене |
---|
Да разгледаме един пример:
Отиваме в онлайн магазина и във филтъра избираме, че имаме нужда от червена тениска:
|
Да творим фасетни индексив няколко прости стъпки:
Трябва ли да пресъздам фасетирани индекси?
Фасетираните индекси се пресъздават автоматично или трябва да ги пресъздадете ръчно, в зависимост от извършените действия:
|
Фасетното търсене подобрява работата на продуктовия каталог. За да го използвате трябва:
- Създаване на фасетирани индекси за продуктовия каталог;
- Следете за предупреждение за необходимостта от ръчно възстановяване на индекси.
В днешния урок ще се опитаме да пресъздадем симулирано фасетно (фасетно) търсене с помощта на 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: Низ, който се използва от машината за шаблони Underscore за изобразяване на всеки елемент от масива items. Към всеки елемент, който може да се използва и в шаблон, се добавят следните атрибути: batchItemNr, batchItemCount и totalItemCount. състояние: Този обект запазва текущите филтри, сортира: currentResult и други. Можете да предоставите низ orderBy или обект за филтри, за да ги конфигурирате предварително. enablePagination: Булева стойност за активиране на страница или бутон "зареждане на още", вярно по подразбиране. paginationCount: Ако странирането е активирано, задава броя на елементите на страница, по подразбиране е 50. facetSortOption: Използвайте тази функция, за да промените реда на фасетните елементи. Взема обект, където ключовете съответстват на имената и стойностите на фасети, в масив от стойности на фасети, които могат да бъдат подредени в реда, в който искате да ги видите. Този пример ще сортира континентите в различен ред, елементите, които не са включени в масива, ще бъдат добавени по азбучен ред: FacetSortOption: ("континент": ["Северна Америка", "Южна Америка"]) Има още няколко шаблона, моля, вижте изходния код на facetedsearch.js, за да видите всички налични опциишаблон. РазработкиМожете да се свържете с някои събития, които трябва да изпращат известия, когато е извършено някакво действие. За да направим това, използваме системата за събития jQuery: facetuicreated: Можете да свържете тази функция към DOM елемента settings.facetSelector, който трябва да бъде уведомен, когато потребителският интерфейс е създаден. facetedsearchresultupdate: Можете да свържете тази функция към DOM елемента settings.resultSelector, за да бъдете уведомени за резултатите от актуализацията. facetedsearchfacetclick: Това събитие се задейства, когато се щракне върху фасет и се задейства върху елемента settings.facetSelector. Което получава ИД на фасет като аргумент. facetedsearchorderby: Това събитие се задейства, когато върху елемента за сортиране се щракне върху елемента settings.facetSelector. Получава ID реда като аргумент. $(settings.resultSelector).bind("facetedsearchresultupdate", function()( // направи нещо, може би )); В тази статия (ниво уебмастър - напреднали), ще говорим за, пресичащи се по различни начини, т.нар. фасетна навигация. За да опростите усвояването на материала, препоръчвам да прегледате статията в Уикипедия „Класификация на аспектите“ и публикациите на английски език(но със снимки!) „Проектирайте по-добра фасетна навигация за вашите уебсайтове“. Фасетната навигация, филтрирана по цвят или ценови диапазон, може да бъде полезна за вашите посетители, но често е вредна за търсенето, като създава множество адресни комбинации с дублирано съдържание. Поради дубликати търсачките няма да могат бързо да сканират сайта за актуализации на съдържанието, което съответно се отразява на индексирането. За да минимизираме този проблем и да помогнем на уеб администраторите да направят фасетираната навигация удобна за търсене, бихме искали да: Идеален за потребители и търсене в Google Ясен път към страниците с продукти/статии: Представяне на URL адреса за страницата на категорията: Представяне на URL адрес за конкретен продукт: Нежелани дубликати, причинени от фасетна навигация Една и съща страница е достъпна от различни уеб адреси: Канонична страница URL: example.com/product.php? елемент=шведска риба Дублирана страница URL:example.com/product.php? item=swedish-fish&category=гумени-бонбони&price=5-10 категория=гумени-бонбони&вкус=кисело&цена=5-10 Грешки:
URL: example.com/category.php? категория=гумени-бонбони&вкус=кисело&цена=над-10 Грешки:
Пример #1: В URL адреса се използват нестандартни параметри: запетаи и скоби, вместо ключ=стойност&:
example.com/category? category=гумени-бонбони&sort=ниско към високо&sid=789 Пример #2: Използване на директории или файлови пътища вместо опции в списъци със стойности, които не променят съдържанието на страницата: Добро решение:
Общите стойности, които не променят съдържанието на страницата и трябва да бъдат посочени като URL параметри, включват:
Използване на незначителни данни, генерирани от потребителите на сайта (като географска дължина/широчина или „преди дни“) в обходени и индексирани URL адреси:
Потребителски агент: * Забрана: /филтриране/ Пример #4. Добавяне на URL параметри без логика.
Пример #5: Предложете допълнителни уточнения (филтриране), когато има нулеви резултати. Зле: Прецизиране до страница с нула резултати (например цена=над-10), което разочарова потребителите и предизвиква ненужни заявки за търсачките. Как да: Показването на страница с нула резултати (например цена=над-10) не е разрешено, освен това е забранено на потребителите да правят ненужни кликвания и търсачките не обхождат това полезна страница. Необходимо е да се предотвратят ненужните URL адреси и да се минимизира пространството на посетителите, като се генерират URL адреси само когато продуктите са налични. Това ще помогне на потребителите да останат ангажирани с вашия сайт (по-малко кликвания върху бутона за връщане назад, когато не е намерен продукт), ще намали броя на възможните URL адреси, известни на търсачките. Освен това, ако страницата не е просто „временно изчерпана“, но е малко вероятно някога да съдържа подходяща информация, помислете дали да й дадете код за отговор 404. На страницата 404 можете да проектирате полезно съобщение за потребителите с повече опции за навигация или поле за търсене, така че потребителите да могат да намерят свързани продукти. За нови сайтове, чиито уеб администратори обмислят внедряване на фасетна навигация, има няколко опции за оптимизиране на обхождането (съвкупността от адреси на вашия сайт, известни на Googlebot) на страници с уникално съдържание и намаляване на индексирането от търсачката на дублиращи се страници (консолидиране на сигнали за индексиране). Определете какви URL параметри са необходими на търсачките, за да обхождат всяка отделна страница със съдържание (т.е. определете какви параметри са необходими, за да създадете поне един път на кликване до всеки елемент). Задължителните параметри могат да включват item-id, category-id, page и др. Определете кои параметри ще бъдат полезни за посетителите с техните заявки и кои е по-вероятно да причинят дублиране при обхождане и индексиране. В примера със сладкарски изделия (мармалад) URL параметърът „вкус“ може да бъде полезен за потребителите със заявките в примера вкус=кисел . Логично е обаче параметърът "цена" да се счита за причиняващ ненужно дублиране категория=гумени-бонбони&вкус=кисело& цена=над-10 . Други често срещани примери:
Вариант 1: и вътрешни връзки Маркирайте всички ненужни URL адреси с . Това ще намали разходите за труд робот за търсенеи предотвратяване на спад на скоростта на сканиране. Трябва да управлявате глобално обхождането чрез robots.txt (Бележка на преводача: вижте статията „“). Вариант 2: Robots.txt и Disallow URL адресите с ненужни параметри се включват в директорията /filtering/, която ще бъде затворена в robots.txt (забрана disallow). Това ще позволи на всички търсачки да обхождат само "правилната" вътрешна връзка (съдържание) на сайта, но ще блокират обхождането на нежелани URL адреси наведнъж. Например ( example.com/category.php?category=гумени-бонбони), ако ценните параметри са артикул, категория и вкус, а идентификаторът на сесията и цената са излишни, тогава URL адресът за вкус ще бъде: Вариант 3: Отделни хостове Уверете се, че най-добрите решения, изброени по-горе (например за ненужни адреси) все още се прилагат. Иначе търсачките вече са формирали голяма линк маса в индекса. Така вашата работа ще бъде насочена към намаляване на по-нататъшния растеж. ненужни страницигледано с робот на googleи консолидиране на индексиращи сигнали. Използвайте параметри със стандартно кодиране и формат ключ=стойност. Уверете се, че стойностите, които не променят съдържанието на страницата, като идентификатори на сесии, са внедрени като ключ=стойност, а не като директории. Не позволявайте кликвания и не генерирайте URL адреси, когато няма елементи за филтриране. Добавете логика към съпоставянето на URL параметри: премахнете ненужните параметри, вместо да добавяте стойности през цялото време (напр. избягвайте генерирането на връзка като тази: example.com/product?cat=gummy-bonbon&cat=lollipops &cat=gummy-candy&item=swedish-fish). Съхранявайте ценни параметри в URL адреса, като ги посочите първи (тъй като URL адресите се виждат в резултатите от търсенето) и по-малко подходящи параметри накрая (като ID на сесията). Уверете се кога използвайки JavaScriptза динамичен контролсъдържание (сортиране/филтриране/скриване) без актуализиране на URL адреса, на вашия сайт има реални уеб адреси, които имат стойност за търсене, като основните категории и продуктови страници, които могат да се обхождат и индексират. Опитайте се да не използвате само начална страница(т.е. един URL) за целия ви сайт и чрез JavaScript за динамична промяна на съдържанието на навигацията - това, за съжаление, ще даде на потребителите само един URL адрес в търсенето. Също така се уверете, че производителността не се влияе от динамичното филтриране най-лошата страна, тъй като ще попречи на потребителя да работи със сайта. Подобрете индексирането на различни страници с едно и също съдържание, като посочите атрибута rel="canonical" на привилегированата версия на страницата. Атрибутът rel="canonical" може да се използва в рамките на един или повече домейни. Оптимизирайте индексирането на "страницирано" съдържание (напр. page=1 и page=2 от категорията "гумени бонбони") чрез (или):
|