نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • در تماس با
  • بهترین راه برای پیاده سازی جستجوی وجهی چیست؟ PINQ - مجموعه داده های نظرسنجی شده

بهترین راه برای پیاده سازی جستجوی وجهی چیست؟ PINQ - مجموعه داده های نظرسنجی شده

جستجوی داخلی

در محصول تعبیه شده است

جستجوی وجهی ساخته شده در فروشگاه آنلاین - جستجوی داخلی - از بسیاری جهات به سرعت کار می کند و سیستم را بارگیری نمی کند.

  • در محصول تعبیه شده است
  • خیلی سریع
  • وب سایت بارگیری نمی شود
  • این بخش اصلی API infoblocks است
  • نیازی به طراحی مجدد سایت ندارد
  • به صورت خودکار دوباره فهرست می شود
چرا خیلی سریع است؟

مشتری فوراً نتایج جستجوی از پیش آماده شده را برای هر ترکیبی از پارامترها نمایش می دهد. این سیستم جنبه های محصول را از قبل محاسبه می کند - تمام تقاطع های ممکن این ویژگی ها در فیلتر. این مجموعه های جستجوی آماده سپس برای مشتریان صادر می شود.

چرا سایت بارگذاری نمی شود؟

در زمان صدور نتیجه برای مشتری، هیچ محاسباتی انجام نمی شود، زیرا نتیجه از قبل آماده است. یک جنبه برای یک محصول جدید بلافاصله پس از اضافه شدن به کاتالوگ فروش ایجاد می شود. جستجو به طور خودکار بر اساس محصولات جدید و ویژگی های جدید فهرست بندی مجدد می شود.

منافع برای مشتریان

مزایای جستجوی وجهی

مشتری شما محصول را خیلی سریع پیدا می کند و به راحتی با تنظیمات فیلتر بازی می کند. مشتری منتظر نمی ماند و بلافاصله نتیجه را دریافت می کند. سرعت جستجو به تعداد موارد موجود در کاتالوگ بستگی ندارد.


فیلتر هوشمند 2.0

مشتری به سرعت محصول را پیدا می کند

مشتری شما با محدود کردن مداوم عبارت جستجو، محصولی را خیلی سریع پیدا می کند. و در هر مرحله، او فوراً نتایج را دریافت می کند - لیستی از محصولات در صورت درخواست. او مجبور نیست منتظر رسیدگی به درخواستش باشد. زیرا سیستم تمام گزینه های ممکن را از قبل محاسبه کرده است و به سادگی موارد خالی را صادر می کند. به تدریج، فروشگاه اینترنتی محصولات کمتر و کمتری را به عنوان نتیجه تولید می کند. این محصولات روز به روز به درخواست مشتری نزدیکتر می شوند.

تعامل و چند بعدی بودن

انتخاب کالا برای خریدار شبیه یک بازی است. مشتری پارامترها (قیمت، وزن) را می کشد، ویژگی ها (رنگ، ​​اندازه) را تغییر می دهد، شرایط اضافی (مارک، مواد، طعم، و غیره) را تنظیم می کند - و سیستم بلافاصله نتایج را بازسازی می کند. در عین حال، هر تعداد پارامتر قابل تنظیم می تواند وجود داشته باشد - تعداد آنها بر سرعت تولید نتیجه تأثیر نمی گذارد.

راحتی و دوستی

با ناوبری وجهی، حتی یک کاربر بی تجربه می تواند به راحتی محصولی را در فروشگاه تحویل بگیرد. دستکاری ابزارهای جستجو بسیار راحت است. علاوه بر این، سیستم تمام پارامترهایی را که می تواند محصولی را انتخاب کند، از خریدار می خواهد. فروشگاه، همانطور که بود، ویژگی های اصلی محصول را به مشتری نشان می دهد.

مشتری منتظر رسیدگی به درخواست نیست!
به عنوان مثال، مشتری شما یک دوربین می‌خرد. در ابتدا، او تنها 3 پارامتر را در فیلتر هوشمند مشخص می کند: قیمت، مارک، اندازه. جنبه او شامل 3 تقاطع است، نتایج جستجوی زیادی وجود دارد، اما مشتری بلافاصله آنها را دریافت می کند. مشتری وزن را تعیین می کند - او به یک ابزار سبک نیاز دارد. سیستم بلافاصله، بدون معطلی، لیست کوچکتری از کالاها را به او می دهد. مشتری اندازه صفحه نمایش را تنظیم می کند، سپس عملکرد مورد نظر را مشخص می کند. در مقابل او - کالاهای مورد نظر.


سرعت جستجو

سرعت جستجو مهم است

سرعت جستجو بر تعداد خریدهای انجام شده تأثیر می گذارد

هیچ چیز مانند مشکل پیدا کردن محصولات در سایت شما مشتری را عصبانی نمی کند. اگر مشتری برای مدت طولانی جستجو کند، به فروشگاه های دیگر می رود. حتی اگر فروشگاه شما دارای مجموعه وسیعی از محصولات و ابزارهای زیادی برای فیلتر کردن آنها باشد. مشتری ممکن است منتظر نتایج درخواست نباشد.


آموزش تصویری: چرا جستجوی وجهی سرعت فیلتر هوشمند را چندین برابر می کند
استفاده از "وجه" جستجو در داخل فروشگاه را با مرتبه ای از قدر سرعت می بخشد. در عین حال، سرعت به تعداد عناصر موجود در کاتالوگ بستگی ندارد.

چرا جستجو خیلی کند است؟
جستجوی یک محصول در ویترین فروشگاه می تواند به طور قابل توجهی بیشتر از زمان بارگذاری صفحه معمولی طول بکشد. به خصوص اگر تعداد زیادی کالا در فروشگاه و خواص این کالاها وجود داشته باشد. یک پرس و جو برای بسیاری از پارامترها، تماس های پایگاه داده زیادی ایجاد می کند و سایت را به طور قابل توجهی بارگذاری می کند. اگر مشتری ها و درخواست های زیادی وجود داشته باشد، سرعت جستجو به طور قابل توجهی کاهش می یابد.

سرعت کار قابل توجه است!

نتایج تست نسخه 15.0 محصول بر روی سه دسته کاتالوگ حاوی 500000 مورد نشان داد که در مقایسه با نسخه های قبلی:
  • جزء فیلتر هوشمند - 15 برابر سریعتر!
  • جزء کاتالوگ - 5 برابر سریعتر!
هوش جستجو ثابت می ماند!

سریع حتی بدون "وجه"!

این محصول دائماً روی تسریع اجزای کاتالوگ خود کار می کند. سرویس Site Speed ​​افزایش قابل توجهی در سرعت را از نسخه به نسخه نشان می دهد!

بازسازی

نمایه سازی و نتایج جستجو به طور مداوم در حال بازسازی هستند. الگوریتم نمایه سازی محتوا در حال بازسازی و تسریع است. کیفیت ارائه نتایج جستجو بهبود یافته است - به ویژه "سر و صدا" کاهش می یابد. توسعه دهندگان قصد دارند داده های شخصی سازی شده را برای مشتری فعلی در نتایج جستجو نمایش دهند.

توسعه دهندگان: شفافیت API


دیدگاه سابق

Facet API شفاف است

"وجه" تعبیه شده در محصول برای API شفاف است. این بخش اصلی API infoblocks است. بنابراین، برای استفاده از آن نیازی به تلاش اضافی برای توسعه دهندگان نیست. همچنین نیازی به طراحی مجدد سایت ندارد.
  • شتاب روش CIBlockElement::GetList
  • ادغام کامل با فیلتر هوشمند
GetList اکنون سریعتر است زیرا به طور خودکار شامل یک "وجه" برای عملکرد است. همچنین یک API جداگانه در D7 وجود دارد.

ادغام کامل با فیلتر هوشمند

اکنون، هنگام انجام تنظیمات در بخش مدیریت، برای ویژگی های محصول، نه تنها می توانید فعالیت را تنظیم کنید - شرکت در فیلتر هوشمند یا خیر. با ارسال یک ویژگی به یک فیلتر هوشمند، می توانید بلافاصله نحوه نمایش آنها را انتخاب کنید. به چه شکلی باید ویژگی را به مشتریان نشان داد: دکمه ها، اندازه ها، لغزنده ها، لیست های کشویی، لیست هایی با انتخاب رنگ و غیره.



نمایش ویژگی در فیلتر هوشمند

قابل سفارشی سازی!

فیلتر هوشمند اکنون زیباتر به نظر می رسد. توسعه دهندگان به راحتی می توانند ظاهر آن را سفارشی کرده و بیشتر سفارشی کنند.

فیلتر هوشمند یا جستجوی وجهی یک فیلتر بر اساس دسته بندی محصول است که در فروشگاه های اینترنتی بزرگ و همان Yandex.market قابل مشاهده است. این کمک می کند تا محصولات را با ویژگی های مورد نیاز کاربر مرتب کنید و تمام موارد غیر ضروری را فیلتر کنید. این یک گزینه بسیار راحت است که به شما امکان می دهد به سرعت محصول یا ماده مناسب را در سایت پیدا کنید.

و بنابراین اجازه دهید مستقیماً به نصب و پیکربندی ماژول های مورد نیاز خود برویم

ابتدا باید ماژول های زیر را دانلود و نصب کنیم: Search API، Search API Database Search، Entity API و Views.

در صفحه ماژول ها عبارتند از:

  • جستجوی API
  • جستجو نماها
  • جستجو در پایگاه داده
  • Entity API
  • بازدیدها
  • مشاهده رابط کاربری
  • Ctools

یک سرور جستجو ایجاد کنید

بریم به پیکربندی > جستجو و فراداده >جستجوی API(/admin/config/search/search_api) و کلیک کنید اضافه کردن سرور.
سپس نام سرور را در لیست کشویی وارد کنید کلاس خدماتانتخاب کنید سرویس پایگاه دادهو ذخیره کنید.

یک شاخص ایجاد کنید

بریم به پیکربندی > جستجو و ابرداده >جستجوی API(/admin/config/search/search_api)، کلیک کنید اضافه کردن سرور (اضافه کردن شاخص).
نام ایندکس را در فیلد وارد کنید نوع آیتم (نوع آیتم)انتخاب کنید ' مواد'، در میدان سرورانتخاب کنید سرور پایگاه داده، مطبوعات یک شاخص ایجاد کنید.


در فرم باز شده فیلدهایی را که مرتب سازی انجام می شود علامت بزنید و ذخیره کنید.
برای اینکه بتوانید بر اساس نام گره مرتب کنید، عنوان را روشن کرده و در مقابل آن در لیست کشویی، نوع آن را انتخاب کنید. رشته، اما نه متن کامل. شما نمی توانید بر اساس متن کامل مرتب کنید.

در فرم باز شده بعدی فیلترها(روی کار) من همه چیز را به طور پیش فرض رها کردم، به برگه بروید چشم انداز (وضعیت) و فشار دهید اکنون فهرست کنید (IndexNow).
پس از تکمیل ایندکس، بیایید یک صفحه جستجو ایجاد کنیم.

یک صفحه جستجو ایجاد کنید

بریم به Structure > Viewsو کلیک کنید یک نمای جدید اضافه کنید (افزودن نمای جدید).
در نمای جدید در لیست کشویی نمایش دهید (نشان دادن)فهرستی را که قبلا ایجاد کردیم انتخاب کنید، بقیه فیلدها (عنوان، عنوان و مسیر) را در صورت نیاز پر کنید.


کلیک بعدی ذخیره و سفارشی سازی کنید(ادامه و ویرایش)،نمای را طبق معمول تنظیم کنید در معیارهای فیلتر، نمایش فقط مطالب منتشر شده و نوع گره مورد نظر را اضافه کردم و نمایش فیلدهای لازم را پیکربندی کردم (برای اینکه بتوانید بر اساس آنها فیلتر کنید باید این فیلدها را به فهرست اضافه کنید).

در این مرحله، ما تنظیمات نمای را به پایان رساندیم، اکنون مستقیماً به فیلتر وجهی می رویم.

A/search_api_ranges.module +++ b/search_api_ranges.module @@ -144.11 +144.8 @@ تابع search_api_ranges_minmax($variables, $order = "ASC") (// در غیر این صورت min/max ما همیشه با ورودی کاربر برابر است.$file = &$query->getFilter()->getFilters(); foreach ($filters به ​​عنوان $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 ))( تنظیم نشده ($filters[$key]); ) )

Patch 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));

پس از آن مشکل حل شد.

( "پرسش": ( "و": [ ( "شرایط": ("کشور": ["be", "fr"]) ), ( "شرایط": ("دسته": ["کتاب"، "فیلم" "])) ])))

برای شمارنده‌ها، می‌توانیم از مصالح داخلی Elasticsearch استفاده کنیم. هر یک از دو وجه به عنوان یک فیلد در ایندکس ذخیره می شود، بنابراین می توانیم در هر یک از این فیلدها از تجمع اصطلاح استفاده کنیم. تجمیع یک شمارنده برای مقدار این فیلد برمی گرداند.

( "پرسش": ( "و": [ ( "شرایط": ("کشور": ["be", "fr"]) ), ( "شرایط": ("دسته": ["کتاب"، "فیلم" "]) ) ] ), "مجموعه ها": ( "کشورها": ( "شرایط": ("فیلد": "کشور") ), "رده ها": ("شرایط": ("فیلد": "رده") )))

اگر بخواهید این کوئری را اجرا کنید، متوجه می شوید که شمارنده ها غیرفعال هستند. دو کشور انتخاب نشده، پرتغال و برزیل، دارای تعداد 0 هستند. اگرچه اگر بخواهیم آنها را انتخاب کنیم، نتایج واقعی وجود دارد (به دلیل یال داخلی). این به این دلیل است که به طور پیش‌فرض، Elasticsearch تجمیع‌های خود را روی مجموعه نتایج انجام می‌دهد. این بدان معناست که اگر فرانسه را انتخاب کنید، فیلترهای دیگر کشورها امتیاز 0 خواهند داشت زیرا مجموعه نتایج فقط شامل مواردی از فرانسه است.

برای رفع این مشکل، باید به Elasticsearch دستور دهیم تا با نادیده گرفتن پرس و جو، تجمیع را در کل مجموعه داده انجام دهد. ما می توانیم این کار را با تعریف خوشه های خود به عنوان جهانی انجام دهیم.

( "پرسش": ( "و": [ ( "شرایط": ("کشور": ["be", "fr"]) ), ( "شرایط": ("دسته": ["کتاب"، "فیلم" "]) ) ] ), "Aggregations": ( "all_products": ( "جهانی": ()، "Aggregations": ( "کشورها": ( "شرایط": ("فیلد": "کشور"))، " دسته بندی ها": ("شرایط": ("فیلد": "رده") ) ) ) )

اگر فقط این کار را انجام می‌دادیم، شمارنده‌های ما همیشه یکسان می‌بودند، زیرا بدون در نظر گرفتن فیلترهای ما، همیشه روی کل مجموعه داده حساب می‌کردند. مجموعه‌های ما باید کمی پیچیده‌تر شوند، برای اینکه کار کند، باید فیلترهایی را به آنها اضافه کنیم. هر تجمیع باید روی یک مجموعه داده حساب کند که همه فیلترها به جز فیلترهای خودش اعمال شوند. بنابراین تجمیع حساب در فرانسه بر روی مجموعه داده با فیلتر دسته اعمال می شود، اما نه فیلتر کشور:

( "پرسش": ( "و": [ ( "شرایط": ("کشور": ["be", "fr"]) ), ( "شرایط": ("دسته": ["کتاب"، "فیلم" "]) ) ] ), "Aggregations": ( "all_products": ( "جهانی": ()، "Aggregations": ( "کشورها": ( "فیلتر": ( "و": [ ( "شرایط": ( "category": ["کتاب"،"فیلم"]) ) ] ), "Aggregations": ( "filtered_countries": ( "شرایط": ("field": "کشور") ) ) ), "مقوله ها": ( "filter": ("و": [ ( "شرایط": ("کشور": ["be","fr"]) ) ] ), "Aggregations": ( "filtered_categories": ( "شرایط": (" فیلد": "رده") ) ) ) ) )))

( "took": 153، "timed_out": false، "_shards": ( "Total": 5، "موفق": 5، "failed": 0 ), "Hits": ( "Total": 3، "max_score" ": 0، "Hits": ["..."] ), "Aggregations": ( "all_products": ( "doc_count": 21, "filtered classes": ( "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) ] ) ), "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" , "دسته من" ) ; $nested = QueryHelper:: تودرتو ("string_facet" , QueryHelper:: فیلتر ([ QueryHelper:: term ("string_facet.facet_name" , [ "value" => $id , "boost" => 1 ] , QueryHelper:: term ("string_facet.facet_value" , ​​[ "value" => $value , "boost" => 1 ] ) , ] ) ); $filter = QueryHelper:: باید ($neted ) ;

در درس امروز سعی خواهیم کرد با استفاده از جاوا اسکریپت یک جستجوی وجهی (وجهی) شبیه سازی شده را بازسازی کنیم. منظورم این است که شما از قبل با خواندن این آموزش می دانید جستجوی وجهی چیست، در غیر این صورت آن را در گوگل جستجو کنید یا آمازون یا نسخه نمایشی من را بررسی کنید.

ابتدا به کتابخانه github.com/eikes/facetedsearch نیاز داریم. آن را دانلود کنید و فایل facetedsearch.js را در پروژه ما قرار دهید. همچنین به کتابخانه های jQuery و Underscore نیاز داریم.

سلب مسئولیت:من می دانم که JQ دیگر یک کیک نیست، اما با استفاده از آن به عنوان قند نحوی معمول، می توانید آن را به کتابخانه های آشناتر یا وانیلی JS برش دهید.

بنابراین ابتدا بیایید یک نشانه گذاری ساده با وابستگی های متصل ایجاد کنیم:

سند

// اینجا جایی است که فیلترهای وجهی را خروجی خواهیم داد
// و در اینجا عناصر ما خواهند بود

اکنون باید تنظیمات برنامه خود را شرح دهیم و یک الگو برای نمایش عناصر آرایه ایجاد کنیم که با استفاده از وجه‌ها مرتب می‌کنیم:

خوب، در واقع آرایه JSON را با عناصری برای نمایش در جستجوی وجهی ما در JS ایجاد کنید:

Var آیتم ها = [ ( "نام": "مری"، "نام خانوادگی": "اسمیت"، "imageURL": "http://lorempixel.com/150/150/cats/2"، "توضیحات": "Sed Ea" Amet. Stet Voluptua. Nonumy Magna Takimata "، "رده": "Mouse"، "زبان": ["Smalltalk"، "XSLT"]، "continent": "Africa")، ("نام": "Patricia" "، "نام خانوادگی": "جانسون"، "imageURL": "http://lorempixel.com/150/150/cats/3"، "توضیحات": "Ut Takimata Sit Aliquyam Labore Aliquyam Sit Sit Lorem Amet. Ipsum Rebum "، "رده": "شیر"، "قاره": "امریکای شمالی")، ... ];

من این آرایه را در یک فایل JS جداگانه قرار می دهم که به طور پویا از پایگاه داده تشکیل می شود.

این همه چیز است، ما در جاوا اسکریپت جستجوی وجهی دریافت می کنیم و می توانیم آن را سفارشی کنیم. در مرحله بعد، من اسناد ترجمه شده کتابخانه را ارائه می کنم، جایی که می توانید محرک های مورد نیاز خود را مشاهده کنید.

مستندات

کارکرد

این دو تابع به فضای نام jQuery صادر می شوند.

facetelize برای مقداردهی اولیه جستجوی وجهی با تنظیمات داده شده استفاده می شود.

facetUpdate را می توان در صورتی استفاده کرد که می خواهید وضعیت جستجوی جنبه را از خارج تغییر دهید.

تنظیمات شی

آیتم ها: آرایه ای از آیتم ها که در این فرآیند فیلتر و مرتب می شوند.

facets: شیئی که کلیدهای آن با کلیدها و مقادیر عناصر مطابقت دارد، عنوان این وجه است. موارد بر اساس مقداری که برای آن کلیدها دارند فیلتر خواهند شد.

orderByOptions: مشابه جنبه‌ها، به جز این جفت‌های کلید/مقدار فقط برای مرتب‌سازی استفاده می‌شوند. وقتی کلید RANDOM فعال است، نتایج را می توان تصادفی کرد.

facetSelector: این انتخابگری است که برای یافتن گره DOM که فیلترهای facet از آن انتخاب می شوند استفاده می شود.

resultSelector: این انتخابگر است که برای یافتن گره DOM که در آن نتایج نمایش داده می شود استفاده می شود.

resultTemplate: رشته ای که توسط موتور قالب Underscore برای رندر کردن هر عنصر از آرایه آیتم ها استفاده می شود. ویژگی‌های زیر به هر عنصر اضافه می‌شود که می‌تواند در یک الگو نیز استفاده شود: batchItemNr، batchItemCount و totalItemCount.

state: این شی فیلترهای فعلی را ذخیره می کند، مرتب می کند: currentResult و موارد دیگر. شما می توانید یک رشته orderBy یا یک شیء فیلتر برای از پیش پیکربندی آنها ارائه دهید.

enablePagination: Boolean برای فعال کردن paginalor و دکمه "load more"، درست به طور پیش فرض.

paginationCount: اگر صفحه بندی فعال باشد، تعداد موارد در هر صفحه را تنظیم می کند، پیش فرض 50 است.

facetSortOption: از این تابع برای تغییر ترتیب عناصر facet استفاده کنید. یک شی را که در آن کلیدها با نام‌ها و مقادیر وجه مطابقت دارند، به آرایه‌ای از مقادیر وجهی می‌برد که می‌توانند به ترتیبی که می‌خواهید آنها را ببینید، مرتب شوند. این مثال قاره ها را به ترتیب دیگری مرتب می کند، عناصری که در آرایه گنجانده نشده اند به ترتیب حروف الفبا اضافه می شوند:

FacetSortOption: ("قاره": ["آمریکای شمالی"، "آمریکای جنوبی"])

چندین الگوی دیگر وجود دارد، لطفاً کد منبع facetedsearch.js را ببینید تا همه گزینه‌های قالب موجود را ببینید.

مناسبت ها

می‌توانید به برخی رویدادها متصل شوید که در صورت انجام برخی اقدامات باید اعلان ارسال کنند. برای این کار از سیستم رویداد jQuery استفاده می کنیم:

facetuicreated: می توانید این تابع را به عنصر DOM settings.facetSelector متصل کنید که باید هنگام ایجاد UI اطلاع داده شود.

facetedsearchresultupdate: می توانید این تابع را به عنصر DOM settings.resultSelector متصل کنید تا از نتایج به روز رسانی مطلع شوید.

facetedsearchfacetclick: این رویداد زمانی اجرا می شود که روی یک وجه کلیک می شود و روی عنصر settings.facetSelector فعال می شود. که شناسه facet را به عنوان آرگومان دریافت می کند.

facetedsearchorderby: این رویداد زمانی فعال می شود که عنصر مرتب سازی بر روی عنصر settings.facetSelector کلیک شود. دستور ID را به عنوان آرگومان دریافت می کند.

$(settings.resultSelector).bind("facetedsearchresultupdate", function()( // کاری انجام دهید، شاید ));

در این مقاله (سطح وب مستر - پیشرفته) در مورد، متقاطع شدن به روش های مختلف، به اصطلاح صحبت خواهیم کرد. ناوبری وجهی برای ساده‌سازی همسان‌سازی مطالب، توصیه می‌کنم به مقاله ویکی‌پدیا «طبقه‌بندی جنبه‌ها» و انتشارات به زبان انگلیسی (اما با تصاویر!) «ناوبری وجهی بهتری را برای وب‌سایت‌های خود طراحی کنید» مراجعه کنید.

پیمایش وجهی فیلتر شده بر اساس رنگ یا محدوده قیمت می تواند برای بازدیدکنندگان شما مفید باشد، اما اغلب برای جستجو با ایجاد ترکیب آدرس های متعدد با محتوای تکراری مضر است. به دلیل موارد تکراری، موتورهای جستجو نمی توانند به سرعت سایت را برای به روز رسانی محتوا اسکن کنند، که بر این اساس بر نمایه سازی تأثیر می گذارد. برای به حداقل رساندن این مشکل و کمک به وب‌مسترها در جستجوی پیمایش وجهی، ما می‌خواهیم:

ایده آل برای کاربران و جستجوی گوگل

پاک کردن مسیر به صفحات محصولات/مقاله:

نشان دادن URL برای صفحه دسته:
http://www.example.com/category.php?category=gummy-candies

نشان دادن URL برای یک محصول خاص:
http://www.example.com/product.php?item=swedish-fish

موارد تکراری ناخواسته ناشی از ناوبری وجهی

همان صفحه از آدرس های مختلف وب قابل دسترسی است:

صفحه متعارف



URL: example.com/product.php؟ آیتم = ماهی سوئدی

صفحه تکراری



URL:example.com/product.php؟ مورد=ماهی سوئدی&رده=آب نبات صمغی&قیمت=5-10


دسته=آب نبات صمغی&طعم=ترش&قیمت=5-10

خطاها:

  • برای گوگل منطقی نیست، زیرا کاربران به ندرت [مارمالاد 9:55 دلار] را جستجو می کنند.
  • منطقی نیست که خزنده ها همان مورد ("سالاد میوه") را از صفحات دسته بندی والدین پیدا کنند (اعم از "Gummi" یا "Sour Gummy").
  • یک نکته منفی برای صاحب سایت، زیرا درخواست های نمایه سازی با چندین نسخه از یک دسته کاهش می یابد.
  • یک نکته منفی برای صاحب سایت، زیرا بار بی فایده و غیر ضروری بر روی پهنای باند سایت است.
صفحات خالی:


URL: example.com/category.php؟ دسته=آب نبات صمغی&طعم=ترش&قیمت=بیش از 10

خطاها:

  • کدی که برای موتورهای جستجو به اشتباه داده شده است (در این صورت صفحه باید کد 404 را بدهد)
  • صفحه خالی برای کاربران


بدترین راه حل (بدون جستجو) برای ناوبری وجهی

مثال شماره 1: پارامترهای غیر استاندارد در URL استفاده می شود: کاما و براکت، به جای کلید=مقدار&:

  • example.com/category؟ [ دسته:آب نبات صمغی ][ مرتب سازی:قیمت کم به بالا ][ sid:789 ]
  • example.com/category?category , gummy-candy , sort , lowtohigh , sid , 789
چگونه:
example.com/category؟ دسته=آب نبات و مرتب سازی=کم به بالا&sid=789

مثال شماره 2: استفاده از دایرکتوری ها یا مسیرهای فایل به جای گزینه هایی در لیست مقادیری که محتوای صفحه را تغییر نمی دهند:
example.com/c123/s789/product?swedish-fish
(که در آن /c123/ دسته است، /s789/ شناسه جلسه است که محتوای صفحه را تغییر نمی دهد)

تصمیم خوب:

  • example.com /gummy-candy/ product?item=swedish-fish&sid=789(دایرکتوری، /gummy-candy/، محتویات صفحه را به روشی معنی دار تغییر می دهد)
بهترین تصمیم:
  • example.com/product?item=swedish-fish& دسته=آدامس شیرینی&sid=789 (پارامترهای URL انعطاف پذیری بیشتری را برای موتورهای جستجو برای تعیین نحوه خزیدن موثر فراهم می کند)
زمانی که این مقادیر مستقیماً در مسیر پیوند قرار می‌گیرند، برای خزنده‌ها دشوار است که مقادیر مفید (مانند "gummy-candy") را از مقادیر بی‌فایده (مانند "SESSIONID") متمایز کنند. از سوی دیگر، پارامترهای URL انعطاف‌پذیری را برای موتورهای جستجو فراهم می‌کنند تا به سرعت بررسی کنند و تعیین کنند که چه زمانی یک مقدار معین به دسترسی خزنده به همه تغییرات نیاز ندارد.

مقادیر رایجی که محتوای صفحه را تغییر نمی دهند و باید به عنوان پارامترهای URL فهرست شوند عبارتند از:

  • شناسه جلسه
  • ردیابی شناسه
  • شناسه های ارجاع دهنده
  • مهر زمانی
مثال شماره 3: تبدیل مقادیر تولید شده توسط کاربر (احتمالا بی نهایت) به پارامترهای URL که قابل خزیدن و فهرست بندی هستند اما برای جستجو بی فایده هستند.
استفاده از داده های جزئی تولید شده توسط کاربران سایت (مانند طول جغرافیایی/طول جغرافیایی یا "روزهای پیش") در URL های خزیده شده و نمایه شده:
  • example.com/find-a-doctor? شعاع=15& عرض جغرافیایی=40.7565068&طول جغرافیایی=-73.9668408
  • example.com/article?category=health&روز پیش = 7
چگونه:
  • example.com/find-a-doctor? شهر=سانفرانسیسکو&محله=سوما
  • example.com/articles?category=health& date=January-10-2014
به جای اینکه به کاربر اجازه دهید مقادیری را برای ایجاد URLهای قابل خزیدن (که منجر به امکانات بی پایان با ارزش بسیار کمی برای بازدیدکنندگان می شود) تولید کند، بهتر است یک دسته بندی صفحه برای محبوب ترین مقادیر منتشر کنید و می توان اطلاعات اضافی را برای بیشتر کردن صفحه درج کرد. با ارزش نسبت به صفحه جستجوی معمولی با نتایج. از طرف دیگر، می توانید مقادیر تولید شده توسط کاربر را در یک فهرست جداگانه قرار دهید و سپس از robots.txt برای غیرفعال کردن خزیدن از آن دایرکتوری استفاده کنید.
  • example.com /فیلتر کردن/ find-a-doctor?radius=15&latitude=40.7565068&longitude=-73.9668408
  • example.com /فیلتر کردن/مقالات?رده=سلامت&روزهای پیش=7
و در robots.txt:
عامل کاربر: *
غیر مجاز: /فیلتر کردن/

مثال شماره 4. اضافه کردن پارامترهای URL بدون منطق

  • example.com /آب نبات/آبنبات چوبی/آب نبات صمغی/آب نبات صمغی/محصول؟ماهی سوئدی
  • example.com/product? گربه = آب نبات صمغی و گربه = آب نبات چوبی و گربه = آب نبات صمغی&گربه=آب نبات و مورد=ماهی سوئدی
تصمیم خوب:
  • example.com /gummy-candy/ product?item=swedish-fish
بهترین تصمیم:
  • example.com/product? آیتم=ماهی سوئدی&رده=آب نبات صمغی
پارامترهای URL اضافی فقط تکراری بودن را افزایش می دهند و در نتیجه سایت با کارایی کمتری خزیده و ایندکس می شود. بنابراین، لازم است قبل از ایجاد URL های جدید، از شر پارامترهای URL غیر ضروری خلاص شوید و به طور دوره ای پیوندهای ناخواسته را پاک کنید. اگر پارامترهای زیادی برای جلسه کاربر مورد نیاز باشد، می توان به جای افزودن مداوم مقادیر، اطلاعات را در کوکی ها پنهان کرد. گربه=آب نبات صمغی&گربه=آب نبات چوبی&گربه=آب نبات صمغی& ...

مثال شماره 5: در صورت وجود نتایج تهی، اصلاحات بیشتر (فیلتر کردن) را پیشنهاد دهید.

بد:
به کاربران اجازه دهید فیلترها را در صورت وجود موارد خالی برای پالایش انتخاب کنند.


اصلاح به صفحه ای با نتایج صفر (به عنوان مثال، قیمت = بیش از 10)، که کاربران را ناامید می کند و باعث جستجوهای غیر ضروری برای موتورهای جستجو می شود.

چگونه:
تنها زمانی پیوند ایجاد کنید که عناصری برای انتخاب کاربر وجود داشته باشد. اگر نتیجه صفر است، پیوند را به عنوان "خاکستری" علامت گذاری کنید (یعنی غیرقابل کلیک). برای بهبود بیشتر قابلیت استفاده، یک نشانگر تعداد موارد در کنار هر فیلتر قرار دهید.


نمایش صفحه ای با نتایج صفر (مثلاً قیمت=بیش از 10) مجاز نیست، بعلاوه کلیک های غیرضروری برای کاربران و خزیدن موتورهای جستجو در این صفحه غیر مفید ممنوع است.

لازم است از URL های غیر ضروری جلوگیری شود و فضای بازدیدکنندگان را با ایجاد URL فقط در زمانی که محصولات در دسترس هستند به حداقل برسانید. این کمک می‌کند تا کاربران در سایت شما درگیر شوند (کلیک‌های کمتری روی دکمه برگشت زمانی که هیچ محصولی پیدا نمی‌شود)، تعداد URL‌های احتمالی شناخته شده برای موتورهای جستجو را کاهش می‌دهد. همچنین، اگر صفحه فقط «به طور موقت موجود نیست» اما بعید است که حاوی اطلاعات مرتبط باشد، به آن یک کد پاسخ 404 بدهید. در صفحه 404 می توانید پیامی مفید برای کاربران با گزینه های ناوبری بیشتر یا کادر جستجو طراحی کنید تا کاربران بتوانند محصولات مرتبط را پیدا کنند.

برای سایت‌های جدیدی که مدیران وب‌سایت‌ها در نظر دارند ناوبری وجهی را پیاده‌سازی کنند، چندین گزینه برای بهینه‌سازی خزیدن (مجموعه آدرس‌های موجود در سایت شما که توسط Googlebot شناخته شده است) صفحات محتوای منحصربه‌فرد و کاهش فهرست‌بندی صفحات تکراری در موتورهای جستجو (تجمیع سیگنال‌های نمایه‌سازی) وجود دارد.

تعیین کنید که چه پارامترهای URL برای موتورهای جستجو برای خزیدن هر صفحه جداگانه از محتوا مورد نیاز است (یعنی تعیین کنید چه پارامترهایی برای ایجاد حداقل یک مسیر کلیک برای هر مورد لازم است). پارامترهای مورد نیاز می تواند شامل شناسه مورد، شناسه دسته، صفحه و غیره باشد.

تعیین کنید که کدام پارامتر برای بازدیدکنندگان با پرس و جوهایشان مفید است و کدامیک بیشتر باعث تکرار در خزیدن و نمایه سازی می شوند. در مثال شیرینی‌پزی (مارمالاد)، پارامتر URL "طعم" می‌تواند برای کاربران با جستجوهای موجود در مثال ارزشمند باشد. طعم = ترش . با این حال، منطقی است که پارامتر "قیمت" را باعث تکرار غیر ضروری در نظر بگیریم دسته=آب نبات صمغی&طعم=ترش& قیمت = بالای 10 . نمونه های رایج دیگر:

  • پارامترهای ارزشمند برای موتورهای جستجو: item-id , category-id , name , brand ...
  • پارامترهای غیر ضروری: session-id، price-range ...
پیاده سازی یکی از چندین گزینه پیکربندی برای URL هایی که حاوی پارامترهای غیر ضروری هستند را در نظر بگیرید. فقط مطمئن شوید که پارامترهای URL "غیر ضروری" واقعاً برای خزیدن توسط خزنده ها یا یافتن هر محصول جداگانه توسط کاربر مورد نیاز نیست!

گزینه 1: و پیوندهای داخلی

همه URL های غیر ضروری را با علامت علامت گذاری کنید. این امر باعث کاهش هزینه های نیروی کار ربات جستجوگر و جلوگیری از کاهش فرکانس اسکن می شود. شما باید خزیدن از طریق robots.txt را به صورت جهانی مدیریت کنید (یادداشت مترجم: به مقاله "" مراجعه کنید).
از ویژگی rel="canonical" برای جدا کردن صفحات فهرست جستجو از صفحاتی که در آنجا مورد نیاز نیستند (مثلاً در صفحه) استفاده کنید قیمت = 5-10 می توانید ویژگی rel="canonical" را بنویسید که نشان دهنده دسته بندی مارمالادهای ترش است example.com/category.php?category=آب نبات ها&طعم=ترش& صفحه = همه ).

گزینه 2: Robots.txt و Disallow

آدرس‌های اینترنتی با پارامترهای غیرضروری در فهرست /filtering/ گنجانده شده‌اند که در robots.txt بسته می‌شود (ممنوع از غیر مجاز کردن). این به همه موتورهای جستجو اجازه می‌دهد فقط لینک ورودی (محتوای) صحیح سایت را بخزند، اما خزیدن URL‌های ناخواسته را به یکباره مسدود می‌کند. مثلا ( example.com/category.php?category=gummy-candies)، اگر پارامترهای با ارزش آیتم، دسته و طعم بودند و شناسه جلسه و قیمت اضافی بودند، URL مربوط به طعم و مزه به صورت زیر خواهد بود:
example.com/category.php?category=gummy-candies& طعم = ترش, اما تمام پارامترهای غیر ضروری، مانند قیمت، URL در یک فهرست از پیش تعریف شده - /filtering/ شامل می شود:
example.com /فیلتر کردن/ category.php?category=آب نبات های صمغی&price=5-10,
که سپس از طریق robots.txt ممنوع خواهد شد:
عامل کاربر: *
غیر مجاز: /filtering/

گزینه 3: هاست جدا

مطمئن شوید که بهترین راه حل های ذکر شده در بالا (مثلاً برای آدرس های ناخواسته) همچنان اعمال می شوند. در غیر این صورت، موتورهای جستجو در حال حاضر یک توده لینک بزرگ در ایندکس تشکیل داده اند. بنابراین، هدف شما کاهش رشد بیشتر صفحات غیر ضروری مشاهده شده توسط Googlebot و تثبیت سیگنال های نمایه سازی خواهد بود.

از پارامترهایی با کدگذاری استاندارد و فرمت کلید=مقدار استفاده کنید.

اطمینان حاصل کنید که مقادیری که محتوای صفحه را تغییر نمی‌دهند، مانند شناسه‌های جلسه، به‌عنوان کلید=مقدار اجرا می‌شوند، نه دایرکتوری‌ها.

وقتی هیچ عنصری برای فیلتر کردن وجود ندارد، به کلیک‌ها اجازه ندهید و URL ایجاد نکنید.

منطق را به نگاشت پارامتر URL اضافه کنید: به جای اضافه کردن مقادیر دائمی، پارامترهای غیر ضروری را حذف کنید (به عنوان مثال، از ایجاد پیوندی مانند این اجتناب کنید: example.com/product?cat=gummy-candy&cat=lollipops &cat=gummy-candy&item=swedish-fish).

پارامترهای با ارزش را در URL با فهرست کردن آنها در ابتدا ذخیره کنید (زیرا URL ها در نتایج جستجو قابل مشاهده هستند) و پارامترهای کمتر مرتبط (مانند شناسه جلسه) را در آخر ذخیره کنید.
از این ساختار پیوند اجتناب کنید: example.com/category.php؟ session-id=123&tracking-id=456&category=آب نبات صمغی&طعم=ترش
اگر درک واضحی از نحوه کار لینک ها در سایت خود دارید، تنظیمات URL را در Webmaster Tools تنظیم کنید.

اطمینان حاصل کنید که هنگام استفاده از جاوا اسکریپت برای مدیریت پویا محتوا (مرتب‌سازی/فیلتر/پنهان کردن) بدون به‌روزرسانی URL، آدرس‌های وب واقعی در سایت شما وجود دارد که دارای ارزش جستجو هستند، مانند دسته‌های اصلی و صفحات محصول، که قابل خزیدن و فهرست‌سازی هستند. سعی کنید فقط از صفحه اصلی (یعنی یک URL) برای کل سایت خود استفاده نکنید، بلکه به صورت پویا محتوای پیمایش را از طریق جاوا اسکریپت تغییر دهید - این، متأسفانه، به کاربران تنها یک URL در جستجو می دهد. همچنین، مطمئن شوید که عملکرد بر فیلتر پویا تأثیر منفی نمی گذارد، زیرا مانع از کار کاربر با سایت می شود.

با مشخص کردن ویژگی rel="canonical" در نسخه ممتاز صفحه، نمایه سازی صفحات مختلف از یک محتوا را بهبود بخشید. ویژگی rel="canonical" را می توان در یک یا چند دامنه استفاده کرد.

نمایه سازی محتوای "صفحه بندی شده" (به عنوان مثال page=1 و page=2 از دسته "آب نبات صمغی") توسط (یکی از این دو) بهینه سازی کنید:

  • یک ویژگی rel="canonical" به یک سری از صفحات اضافه کنید که دسته بندی متعارف را با پارامتر "view-all" مشخص می کند (به عنوان مثال page=1، page=2، و page=3 از دسته "آب نبات های صمغی" با rel=" متعارف” در دسته=آب نبات صمغی&صفحه=همه، اطمینان حاصل کنید که صفحه مربوط به کاربران است و به سرعت بارگذاری می شود.
  • از نشانه گذاری صفحه بندی rel="next" و rel="prev" برای نشان دادن رابطه بین صفحات جداگانه استفاده کنید (به "Paginaton با rel="next" و rel="prev" " مراجعه کنید.
فقط لینک های متعارف را در نقشه های سایت قرار دهید.

برترین مقالات مرتبط