atis2345
@atis2345
PHP developer

Как правильно организовать фильтр товаров используя Sphinx and MongoDB or Mysql?

Всем привет.

Есть каталог товаров n миллионов.
Поиск товаров происходит по нескольким параметрам:
Название, цена ...
+ фильтр по цене ...

Монга отрабатывает на ура но вот с полнотекстовым поиском справляется мягко говоря хреново. Использование сфинкса дает существенный недостаток - нужно передавать id-шники товаров в MongoDB. Осложняется тем что найденных результатов может быть n миллионов + сортировка!
Читал доку ( не слишком внимательно ) вроде есть возможность связать Mysql и Sphinx используя SphinxQL.

Сталкивался кто-то с такой проблемой? Как решали?
  • Вопрос задан
  • 740 просмотров
Решения вопроса 1
atis2345
@atis2345 Автор вопроса
PHP developer
Сравнение решений
1.1)

-- Sphinx search : array ids

SELECT *
FROM itemsindex
WHERE name MATCH(@name request)
ORDER BY price DESC


1.2)

-- Mysql search : array items

SELECT *
FROM items
WHERE id IN(ids)
   && EXISTS( SELECT *
              FROM characteristics
              WHERE id = items.id
                 && char_val = filterVal )
   && EXISTS( SELECT *
              FROM characteristics
              WHERE id = items.id
                 && char_val = filterVal2 )


2)

-- MongoDB search : array items

db.items.find({$text: {$search: request}, characteristics: {char_val: filterVal}});


В моем случае выбор пал на монгу. Пусть у нее и не идеальный fulltext поиск но этот способ гораздо компактнее и эффективнее.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
un1t
@un1t
SphinxQL не имеет отношение к mysql, это язык запров похожый на SQL, к нему можно подключаться с помощью любого mysql драйвера.

Sphinx лучше с мускулом интегрирован, но это не так важно. В индекс можно данные хоть откуда запихнуть.

>Осложняется тем что найденных результатов может быть n миллионов + сортировка!
А вы что собрались миллионы товаров на одной странице выводить? offset, limit есть же.
Ответ написан
Ваш ответ на вопрос

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

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