Search API. При обновлении прикрепленного к странице товара, фильтр не обновляется.

Главные вкладки

Аватар пользователя engenes engenes 15 марта 2021 в 10:40

У меня создан фильтр материалов по характеристикам прикрепленных к ним товаров.

При изменении данных в самом товаре, например цена,Search API не индексирует заново ноду, ведь сама страница осталась незатронутой.

Подскажите как решить проблему?
на сайте настроен импорт товаров, и к одной ноде может быть прикреплено до 300 товаров

Комментарии

Аватар пользователя marassa marassa 15 марта 2021 в 11:43

Трижды прочитал, вообще ничего не понял.
Что у Вас "товар" в терминах друпала? Что за нода, к которой он прикреплен, и зачем? И, наконец, что есть "страница", которая "осталась незатронутой"?
То есть хотелось бы понять ER-диаграмму (схему данных), ну и настройки индекса Search APi, конечно.

Аватар пользователя engenes engenes 15 марта 2021 в 13:03

Это страница товара. Тип материала

страница товара содержит в себе вариации товаров (commerce products) при выборе вариации меняется цена.

Аналогично тому как это устроено на али экспресс, когда открываем страницу интересующего нас продукта, и выбираем нужные нам параметры

Search api индексирует сущность Страница товара (то есть мой тип материала к которому привязаны commerce products.

для индекса цены в полях включены соответствующие элементы

фильтр по цене работает корректно

но если мы обновим цену у товара, и сохраним сам товар.
то в фильтре будет показываться старая цена, так как переиндексации не происходит

А не происходит, потому что сама нода не была обновлена, а обновлен только товар (commerce product), который к ней прикреплен.

Вопрос, как проиндексировать, ноду если была обновлена одна из вариаций товаров, прикрепленная к ней

Аватар пользователя marassa marassa 15 марта 2021 в 13:26

Ага, кажется понял. Для восьмёрки есть патч: https://www.drupal.org/project/search_api/issues/2007692
Для семёрки - понятия не имею.
Я с коммерсом не работал, но судя по описанию проблема должна быть практически у всех, кто его использует - непонятно как все остальные живут с этим. Можно конечно тупо перестраивать весь индекс после каждого изменения цены, но это не слишком изящное решение. Ещё можно "фиктивно" редактировать ноду (изменить какую-нибудь мелочь и потом вернуть как было), чтобы она переиндексировалась, но это ж помнить надо...

Аватар пользователя engenes engenes 15 марта 2021 в 13:33

Пока решение: при импорте товаров буду записывать во временную таблицу id всех затронутых нод и передавать их в стандартную функцию индекса.

Написать хук, который будет при сохранении товара, обновлять ноду тоже не вариант, так как в ноде может быть несколько товаров а обновить ее нужно однократно