如何有效地返回多个共享索引的文档?

时间:2014-02-20 12:52:18

标签: sphinx

我正在使用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,或者避免重复不必要的索引?

我是一名狮身人面像小伙子,所以我不确定如何处理这个问题。

1 个答案:

答案 0 :(得分:1)

请参阅 http://www.sitepoint.com/hierarchical-data-database/

它谈论的是一个数据库,但同样的系统在sphinx中同样运行良好。可能需要一段时间来解决问题,但值得掌握(恕我直言!)。

(即将左/右列添加到数据库,然后将它们作为sphinx索引中的属性包含在内)