Як працює індексація в магенто


30
  1. Як працює індексація в Magento
  2. Що саме це робить?
  3. Чому це потрібно?

Це посилання: stackoverflow.com/questions/4945307/… має допомогти вам
TBI Infotech

Ось як її процеси і дії в Magento 2 magento.stackexchange.com/questions/90510 / ...
Yogesh Trivedi

Яку версію Magento ви використовуєте? Досить багато змін було внесено в v1.13 - тому очікуйте відмінностей у версії до цієї версії. Ось приємний пост у блозі, де пояснюється модуль mView та індексація у версії Magento 1.13: eschrade.com/page/…
Пітт

Відповіді:


63

У Магенто існують різні види індексів.
Всі індексатори є там, щоб зробити роботу швидше.
Я висвітлю тут лише деякі з них.

Плоский індекс
Є 2 таких індексу. Один для категорій і один для продуктів.
За замовчуванням категорія та суб'єкти товарів (а також клієнти та адреси клієнтів, але вони не важливі в цій ситуації) - це об'єкти EAV . Це дуже приємно для розширення. Але це вбивця продуктивності, оскільки для отримання всіх значень для всіх атрибутів потрібно безліч приєднань або декількох запитів.
Ось де грає плоский індексатор.
Вона перетворює структуру EAV в плоску структуру. Я маю на увазі, що він створює таблицю (по одній для кожного представлення магазину в Magento), яка містить один стовпець, відповідний атрибуту. Це робить вибір швидше. Для категорій всі атрибути перетворюються на стовпці таблиці. Що стосується лише тих продуктів, які ви позначені як "Використовуються в переліку продуктів", оскільки ви можете продати всі типи товарів з різними атрибутами, і створити одну таблицю з стовпцями gazillion неможливо.
Також деякі продукти можуть бути відключені або можуть не належати до певного веб-сайту, і немає необхідності включати їх у записи для пошуку. Вони виключаються індексатором.
Створені плоскі таблиці використовуються для зчитування даних у фронтоні. Програми все ще використовують структуру EAV.

Каталог пошуку в каталозі
Ви можете шукати продукти за багатьма значеннями атрибутів. Деякі з них можуть не включатися до плоских таблиць, згенерованих плоским індексом. Цей індекс заповнює таблицю зі значеннями атрибутів для пошуку для продуктів, тому їх легше шукати на основі ключових слів. Маючи всю інформацію в одній таблиці (або одному полі), можна використовувати Повний текст пошуку та отримати відповідні результати.

Ціни на продукцію .
На ціну товару може впливати безліч змінних. Наприклад, правила клієнтів, веб-сайт, правила знижок.
Як і вище, отримання продуктів за їх цінами означатиме безліч приєднань або декількох варіантів. Крім того, в комплекті продуктів є дивна система ціноутворення. Цей індексатор агрегує дані в деяких таблицях ( catalog_product_index_price_*) і значно полегшує вибір (сортування та фільтрування).

Перезаписує URL-адресу каталогу
Це очищає правила перезапису URL-адрес, встановлюючи, який URL-адреса відповідає якому продукту чи категорії. У такий спосіб внутрішній системі управління URL-адресом простіше визначити, яку сторінку слід переглянути при виклику нестандартного URL-адреси. Замість пошуку по всіх класах URL-адрес продукту та категорій він просто шукає в одній таблиці.

Продукти категорії
У Magento ви можете встановити атрибут категорії під назвою "Is Anchor" на "true" або "false". Якщо це правда, це означає, що у відповідній категорії будуть перераховані всі товари з її дочірніх категорій. Знову ж таки, для визначення цього реального часу знадобиться більше ресурсів, ніж просто читання однієї таблиці. Цей індексатор створює асоціацію між продуктами та категоріями на основі асоціацій, які ви встановили в заднім часі, та прапор "Є якір" для категорій.

Статус запасу
Для простих продуктів це легко. Вони можуть бути на складі або відсутні на складі, але налаштувати, згрупувати та згрупувати це не так просто. Вони можуть бути на складі або на складі, залежно від дитячих товарів, пов’язаних з основним продуктом. Знову (я тут просто повторюю себе) отримання статусу в режимі реального часу означало б багато запитів.

Властивості товару .
Цей збирає всі атрибути, які можуть використовуватися в багатошаровій навігації з тієї ж причини. Маючи їх на одному місці для швидшого читання.

Агрегація тегів
Я поняття не маю, що це робить. Я ніколи не використовував теги в реальному реальному проекті.


дякую, маріус, це найкраща відповідь ... я отримав
сонам

Що ви мали на увазі, сказавши, що плоскі таблиці використовуються лише у фронтенді (а бекенд все ще використовує структуру EAV)? Я новачок, і з того, що я зрозумів, коли ми створюємо / оновлюємо такі об'єкти, як продукти, він все ще використовує таблиці EAV для виконання цих операцій, і ми повинні встановити можливість оновлення плоских таблиць після збереження або оновлення їх вручну ці зміни відображатимуться в плоских таблицях. Ви посилаєтесь на цей процес, коли ви це говорили? Не могли б ви детальніше зупинитися на цьому? Спасибі!
Bharadwaj Srigiriraju

1
@Marius: Під час переіндексації я отримую повну помилку таблиці. Будь ласка, допоможіть. Помилка, яку я отримую, це таблиця 'catalog_product_index_price_bundle_sel_tmp' заповнена
чорна борода

1
@Marius після 3 років цієї відповіді, чи маєте ви якесь уявлення про агрегацію тегів, це пов’язано з тегами товарів ??
Murtuza Zabuawala

1
@Black. У вас є 2 налаштування для індексів. "Оновити при збереженні" та "Посібник". Для оновлення збереження все повинно відбуватися автоматично, коли ви зберігаєте продукт. Але це може спричинити проблеми з продуктивністю. Наприклад, якщо ви змінюєте кілька продуктів одночасно. У ручному режимі після повторного збереження не запускається повторне деіндексація, але після завершення вам доведеться відновити вручну.
Маріус

11

Не можу взяти на це кредит, оскільки це взято з оригіналу публікації за адресою: https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-detail

Індексація Magento за духом лише схожа на індексацію на рівні бази даних. Як стверджує Антон, це процес денормалізації, що дозволяє швидше працювати з сайтом. Дозвольте спробувати пояснити деякі думки, що стоять за структурою бази даних Magento, і чому вона робить індексацію необхідною для роботи зі швидкістю.

У більш "типовій" базі даних MySQL таблиця для зберігання продуктів каталогу буде структурована приблизно так:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

Це швидко для пошуку, але це залишає принципову проблему для частини програмного забезпечення для електронної комерції: що ви робите, коли хочете додати більше атрибутів? Що робити, якщо ви продаєте іграшки, а не стовпчик розміру, вам потрібен age_range? Ну, ви можете додати ще один стовпець, але має бути зрозуміло, що у великому магазині (думаю, наприклад, Walmart) це призведе до порожніх рядків на 90%, а спроба збереження нових атрибутів майже неможлива.

Для боротьби з цією проблемою Magento розбиває таблиці на менші одиниці. Я не хочу відтворювати всю систему EAV у цій відповіді, тому прийміть цю спрощену модель:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Тепер можна додавати атрибути за бажанням, вводячи нові значення в product_attributes, а потім додаючи суміжні записи в product_attribute_values. Це в основному те, що робить Magento (з трохи більше поваги до типів даних, ніж я показав тут). Насправді зараз немає жодної причини, щоб два продукти взагалі мали однакові поля, тому ми можемо створювати цілі типи продуктів з різними наборами атрибутів!

Однак ця гнучкість приносить свою ціну. Якщо я хочу знайти колір сорочки у своїй системі (тривіальний приклад), мені потрібно знайти:

  1. Product_id товару (у таблиці продуктів)
  2. Attribute_id для кольору (у таблиці атрибутів)
  3. Нарешті, фактичне значення (у таблиці attribute_values)

Магенто працював так, але це було повільно. Тож, щоб домогтися кращої роботи, вони пішли на компроміс: як тільки власник магазину визначив потрібні атрибути, продовжуйте та генеруйте велику таблицю з самого початку. Коли щось змінюється, запускайте його з космосу і генеруйте заново. Таким чином, дані зберігаються головним чином у нашому приємному гнучкому форматі, але запитуються з єдиної таблиці.

Отримані в результаті таблиці пошуку - це "індекси" Magento. Коли ви повторно індексуєте, ви підірвите стару таблицю і знову її генеруєте.

Сподіваюсь, що трохи прояснить речі!


nuke it from space, приємно :)
Wietse

5

Magento - це досить потужна і складна система. Це дозволяє працювати з великою кількістю даних, але коли база даних перевантажена тоннами записів, вона стає важкою і повільною. Magento використовує індекси для вирішення цієї проблеми. Індекси - це додаткові таблиці бази даних з деякими плоскими даними, що дозволяє організувати швидкі відповіді з бази даних.

За замовчуванням основна система оновлює індекси для збереження кожного елемента. Але в деяких випадках вам потрібно зробити це вручну, наприклад, деякі види масових дій тощо. Ви можете оновлювати індекси будь-коли за допомогою адміністратора (адміністратор-> Система-> Управління індексами). Але іноді це викликає проблеми.

Наприклад, якщо у вас є 10k + продуктів та багато категорій, перебудова індексу "переписування URL-адреси каталогу" може зайняти години. Тоді скрипт php може просто зламатися через перевищення max_execution_time. Існує спосіб вирішити декілька проблем, запустивши процес перевстановлення з командного рядка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.