搜索多个索引
Search over multiple indexes
我的数据库中有三个 table
组织
|编号 |姓名 | attribute_1 | attribute_2 |
文件
|编号 | org_id |内容 |
人
|编号 | org_id |姓名 |状态 |
组织和文档之间的关系是1:1。组织可能只有一份文件。
组织和个人之间的关系是1:n。组织可能有很多人。
Table document 有大约 12 000 000 条记录,占用磁盘空间超过 500 Gb。 table 中的记录永远不会改变。
Table organization 有大约 30 000 000 条记录,但只占用 8 Gb 的磁盘空间。 table 中的记录经常更改,因此我需要重新编制索引。
这是我的指数:
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",文档中包含 "bankrupt" 且具有名称为 "John".[=11 的人的前 100 个组织=]
我该怎么做?
P.S。我使用 Sphinx API,但我可以切换到 SphinxQL
好吧,Sphinx 本身不能在索引之间进行 JOIN。它唯一的多索引功能是执行 UNION 样式查询。
...所以要做到这一点需要建立一个'prejoined'索引。一个索引结合了所有三个索引的数据。因此可以在任何组合中进行搜索。
sql_query
只是一个任意的数据库查询,大多数数据库引擎都支持连接,所以可以在那里进行连接。由于查询可能会很昂贵,可以使用 Ranged Queries 将其分解。
http://sphinxsearch.com/docs/current.html#ex-ranged-queries
Sphinx 确实有 GROUP BY,因此可以按组织或文档分组,如果只需要一行。 (因为索引可能包含多行,因为多人
我的数据库中有三个 table
组织
|编号 |姓名 | attribute_1 | attribute_2 |
文件
|编号 | org_id |内容 |
人
|编号 | org_id |姓名 |状态 |
组织和文档之间的关系是1:1。组织可能只有一份文件。
组织和个人之间的关系是1:n。组织可能有很多人。
Table document 有大约 12 000 000 条记录,占用磁盘空间超过 500 Gb。 table 中的记录永远不会改变。
Table organization 有大约 30 000 000 条记录,但只占用 8 Gb 的磁盘空间。 table 中的记录经常更改,因此我需要重新编制索引。
这是我的指数:
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",文档中包含 "bankrupt" 且具有名称为 "John".[=11 的人的前 100 个组织=]
我该怎么做?
P.S。我使用 Sphinx API,但我可以切换到 SphinxQL
好吧,Sphinx 本身不能在索引之间进行 JOIN。它唯一的多索引功能是执行 UNION 样式查询。
...所以要做到这一点需要建立一个'prejoined'索引。一个索引结合了所有三个索引的数据。因此可以在任何组合中进行搜索。
sql_query
只是一个任意的数据库查询,大多数数据库引擎都支持连接,所以可以在那里进行连接。由于查询可能会很昂贵,可以使用 Ranged Queries 将其分解。
http://sphinxsearch.com/docs/current.html#ex-ranged-queries
Sphinx 确实有 GROUP BY,因此可以按组织或文档分组,如果只需要一行。 (因为索引可能包含多行,因为多人