搜索多个索引

时间:2017-03-19 08:41:19

标签: sphinx

我的数据库中有三张表

组织
| id |名字| attribute_1 | attribute_2 |

文档
| id | org_id |内容|


| id | org_id |名字|状态|

组织文档之间的关系为1:1。组织可能只有一份文件。

组织之间的关系为1:n。组织可能有很多人。

文档有大约12 000 000条记录,磁盘上的记录大于500 Gb。表中的记录永远不会改变。

组织有大约30 000 000条记录,但磁盘上只有8 Gb。表中的记录经常变化,因此我需要进行完全重新索引。

以下是我的指数:

source organization {
        sql_query = select * from organization
        sql_attr_string attribute_1
        sql_attr_string attribute_2
}

source document {
        sql_query = select * from document
        sql_attr_uint org_id
}

source person {
        sql_query = select * from person
        sql_attr_uint org_id
        sql_attr_uint status
}

典型的请求如下:

找到包含" Acme"的前100个组织在名义上,"破产"在文档中,有名字的人" John"。

我该怎么做?

P.S。我使用Sphinx API,但我可以切换到SphinxQL

1 个答案:

答案 0 :(得分:0)

Sphinx本身不能在索引之间进行JOIN。它唯一的多索引功能是进行UNION样式查询。

...所以要做到这一点需要建立一个“预先加入”的#39;指数。单个索引组合来自所有三个索引的数据。那么可以搜索任何组合。

sql_query只是一个任意的数据库查询,并且大多数数据库引擎都支持连接,因此可以在那里进行JOIN。由于查询可能会很昂贵,因此可以使用Ranged Queries将其分解。 http://sphinxsearch.com/docs/current.html#ex-ranged-queries

Sphinx确实有GROUP BY,因此可以按组织或文档分组,如果只想要一行。 (因为索引可能包含多行,因为有多个人