我的数据库中有三张表
组织
| 身份证 | 姓名 | 属性_1 | 属性_2 |
文件
| 身份证 | org_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”、文档中包含“破产”且人员名为“John”的前 100 个组织。
我怎样才能做到这一点?
PS我使用Sphinx API,但我可以切换到SphinxQL
好吧,Sphinx 本身不能在索引之间进行 JOIN。它唯一的多索引功能是执行 UNION 样式的查询。
...所以要做到这一点需要建立一个“预先加入”的索引。单个索引组合了来自所有三个索引的数据。因此可以以任意组合进行搜索。
sql_query
只是一个任意的数据库查询,大多数数据库引擎都支持连接,所以可以在那里进行 JOIN。由于查询可能会很昂贵,因此可以使用远程查询对其进行分解。http://sphinxsearch.com/docs/current.html#ex-ranged-queries
Sphinx 确实有 GROUP BY,因此可以按组织或文档进行分组,如果只需要一行。(因为索引可能包含多行,因为多人
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句