2013-09-07 5 views
0

У меня очень маленькая база данных MySQL, в которой хранится информация о товарах и пользователях. Я пытаюсь реализовать поиск среди пользователей, которые купили некоторые товары по имени и фамилии. Поисковая система Sphinx содержит много хороших рекомендаций. Поэтому я использую его. Теперь мой поиск выглядит следующим образом:присоединиться к mysql и sphinx

  1. Поиск с идентификаторами пользователя Sphinx в соответствии с именем и фамилией.

  2. Поиск в MySQL (не с Сфинксом) товарами в соответствии с конкретными фильтров (Ид или категории, цена и т.д.), где user_id В идентификаторах из ITEM1.

Как реализовать это с помощью одного запроса JOIN?

ответ

2

Вы не можете напрямую, потому что, как вы говорите, индекс sphinx и база данных живут в разных «системах».

Так что «соединение» происходит в вашем приложении. Похоже, что вы уже реализуете то, что эффективно объединяется.

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

1) SphinxSE. Это поддельный механизм хранения mysql, когда вы делаете запрос против виртуальной таблицы, запрос выполняется в фоновом режиме обратно в индекс sphinx, а результаты запроса представляются в виде таблицы в mysql. Теперь, поскольку его таблица mysql, mysql затем присоединяет ее к таблице базы данных, чтобы представить набор результатов, расчесывая запрос и данные. (все еще существуют отдельные системы, но mysql реализует логику соединения)

2) Атрибуты. Может хранить данные в индексе sphinx наряду с полнотекстовым индексом. Sphinx может возвращать атрибуты в наборах результатов. Таким образом, вы избегаете необходимости соединения, потому что вы получаете результаты поиска вместе с данными (которые вы получили от mysql) за один раз. (таким образом вы создаете один большой «нормализованный» индекс)

Смежные вопросы