Приветствую!
Суть:
Имеется индекс товарных предложений, в котором помимо основных данных для фасетного и полнотекствого поиска есть атрибуты формата JSON:
1) Атрибут с наименованием "similar_from". В данном атрибуте лежит массив IDs похожих товаров,
для которых данный товар является похожим.
+-------+---------------------------------+
| id | similar_from |
+-------+---------------------------------+
| 1 | [2, 3] |
+-------+---------------------------------+
| 2 | [1, 3] |
+-------+---------------------------------+
| 3 | [1, 2] |
+-------+---------------------------------+
Здесь видно, что:
- товар с ID:1 является похожим для товаров ID:2, ID:3
- товар с ID:2 является похожим для товаров ID:1, ID:3
- товар с ID:3 является похожим для товаров ID:1, ID:2
2) Атрибут с наименованием "similar". В данном атрибуте лежит массив IDs
похожих товаров для данного товаров
+-------+---------------------------------+
| id | similar |
+-------+---------------------------------+
| 1 | [3, 2] |
+-------+---------------------------------+
| 2 | [3, 1] |
+-------+---------------------------------+
| 3 | [2, 1] |
+-------+---------------------------------+
По сути, эта некая инверсия данных
similar_from атрибута.
С важным уточнением: здесь крайне важна очередность, т.е. чем меньше индекс у элемента массива, тем он более похож на конкретный товар. Например, ID:3 более похож на товар ID:1, чем ID:2.
(Построением самих коллекций (массив
similar) похожих товаров занимается специальный алгоритм бекенда, который высчитывает расстояния между товарами)
Вопрос:
Как правильно написать запрос к sphinx (sphinxql), чтобы построить выборку похожих товаров для конкретного товара, с учётом очередности, которая задана в самом массиве
similar. Причём, важно не потерять возможность уметь фильтровать, делать пагинацию, другую сортировку (по другим полям индекса, в этом случае сортировка по очередности из массив similar не нужна) и т.д все базовые плюшки sphinx?