代码之家  ›  专栏  ›  技术社区  ›  Johno

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

  •  0
  • Johno  · 技术社区  · 10 年前

    我正在使用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的查询进行联合,等等(它可能有4或5个级别的深度),但这似乎非常低效。是否有方法在第一个字段中返回多个文档ID,或者避免重复不必要的索引?

    我是一个斯芬克斯的笨蛋,所以我不知道如何解决这个问题。

    1 回复  |  直到 10 年前
        1
  •  1
  •   barryhunter    10 年前

    看见 http://www.sitepoint.com/hierarchical-data-database/

    它谈论的是一个数据库,但同样的系统在斯芬克斯中也同样适用。它可能需要一段时间才能让你的头脑清醒,但它非常值得掌握(我的天啊!)。

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