psylosss
@psylosss

Sphinx: получить количество значений mva-атрибута?

Добрый вечер!


Помогите, пожалуйста. Уже всю голову сломал.


Есть товары, есть отзывы к товарам. В форме поиска два поля: «запрос» и чекбокс «искать

только с отзывами». Нужно найти товары, названия которых ИЛИ комментарии к которым

содержат искомый запрос. При этом надо учитывать галочку. И именно это никак не

получается. Сделал mva-атрибут со списком id отзывов, но как получить атрибут, содержащий

КОЛИЧЕСТВО отзывов? Чтобы в дальнейшем фильтровать по значению этого атрибута.
  • Вопрос задан
  • 3221 просмотр
Пригласить эксперта
Ответы на вопрос 3
Shedar
@Shedar
Я бы просто ввел атрибут количества отзывов.
Преимущество по сравнению с mva — обычные атрибуты сохраняются после апдейтов, т.е. для изменения количества отзывов не придется заново индексировать товары.
Ответ написан
psylosss
@psylosss Автор вопроса
Решил задачу с помощью хранимых функций: get_comments_count(product_id) и get_positive_comments_count(product_id). Что-то не очень изящно получилось, но работает… Может быть, все же есть решение в плоскости сфинкса? было бы значительно удобнее
Ответ написан
Комментировать
@klirichek
MVA - не vector а set.
В нём сохраняется не всё подряд, как засунули - а только уникальные значения по возрастанию:
- вставляете в атрибут (10,10,11,11,43,43,12,12)
- по факту получаете там (10,11,12,43)

У вас в принципе можно вообще сделать union и определить в индексе два поля - описание и "отзывы" (второе - joined_field из всех отзывов на данный товар) (при ft-поиске вам же неважно, какие именно отзывы; главное, чтобы те, что относятся к конкретному товару).
id-шки отзывов (если вдруг нужны) можно положить в mva. Там же положить отдельный атрибут с их количеством.
Получается схема вроде:
a_product_id, f_description, f_joined_feedbacks, mva_feedbacks_ids, a_feedbacks_count
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы