我正在使用Sphinx索引一些数据。 我有分类的对象,并且类别具有层次。我的基本表结构如下:
Objects
| id | name |
| 1 | ABC |
| 2 | DEF |
...
Categories
| id | name | parent_id |
| 1 | My Category | 0 |
| 2 | A Child | 1 |
| 3 | Another Child | 1 |
...
Object_Categories
| object_id | category_id |
| 1 | 2 |
| 2 | 3 |
...
我的配置目前是:
sql_query = SELECT categories.id, objects.name, parent_id FROM categories \
LEFT JOIN object_categories ON categories.id = object_categories.category_id \
LEFT JOIN objects ON objects.id = object_categories.object_id
sql_attr_uint = parent_id
这将返回包含与我的搜索匹配的对象的任何类别的类别ID,但我需要进行调整以获取该类别中的对象或其任何子项
显然,我可以使用另一个从匹配类别父类获取ID的UNION这个查询,依此类推(它可能达到4或5级深度),但这看起来非常低效。有没有办法在第一个字段中返回多个文档ID,或者避免重复不必要的索引?
我是一名狮身人面像小伙子,所以我不确定如何处理这个问题。
答案 0 :(得分:1)
请参阅 http://www.sitepoint.com/hierarchical-data-database/
它谈论的是一个数据库,但同样的系统在sphinx中同样运行良好。可能需要一段时间来解决问题,但值得掌握(恕我直言!)。
(即将左/右列添加到数据库,然后将它们作为sphinx索引中的属性包含在内)