我正在尝试将多个数据库索引到一个 solr 索引中。我一直在阅读有关多个数据源的 solr wiki 并尝试使用不同类型的设置,但我无法获得所需的结果。
我的配置如下所示:
<dataConfig>
<!-- Has 10000 items -->
<dataSource name="ds1" driver="org.h2.Driver" url="jdbc:h2:file:/path/to/first" />
<!-- Has ~7000 items -->
<dataSource name="ds2" driver="org.h2.Driver" url="jdbc:h2:file:/path/to/second" />
<document name="myDocName">
<entity name="firstEntity" rootEntity="true"
dataSource="ds1" query="SELECT * FROM BLAH"
transformer="my.Transformer" threads="4">
... <!-- field configuration here -->
</entity>
<entity name="secondEntity" rootEntity="true"
dataSource="ds2" query="SELECT * FROM BLAH"
transformer="my.Transformer" threads="4">
... <!-- field configuration here -->
</entity>
</document>
</dataConfig>
现在,我们目前正在使用 testdata,所以我知道每个数据库中有多少条记录,第一个包含 ~7000,第二个包含 10000。当我开始索引时,我收到一条信息消息,有 ~17000 个添加:
INFO: {deleteByQuery=*:*,add=[5, 1, 2, 6, 7, 4, 8, 3, ... (17069 adds)],commit=} 0
但是,当我在 Web 界面中运行 * : * 查询时,我只得到 10000 个结果(这正是最大数据库中的项目数。这似乎表明 7096 个文档必须包含其中的实体,而剩下的只有一个。
我试图在配置文件中记录元素,但这导致只有一个被导入(可能是因为它们具有相同的名称,即文档名称=“myDocName”为两个文档元素配置相同)。
在这一点上,我被卡住了,不知道如何正确配置它。我唯一能想到的就是我必须分别索引两个数据库,但我也不清楚这方面的工作流程。任何帮助,将不胜感激。
更新 1:我尝试为这两个实体提供不同的名称(无论如何,这都是根据文档所必需的),但这会导致以下行为。第一个文档从第一个数据库添加,接下来前 N 个现有文档被第二个数据库中的文档覆盖,其中 N 是第二个数据库中的记录数。显然这不是我想要的,我想要 N个额外的文件。在配置中添加第二个文档元素似乎也不起作用。
更新 2:根据此错误报告中的评论:https ://issues.apache.org/jira/browse/SOLR-895 ,文档标签中的根实体应为这些实体生成新文档。这不是我正在发生的事情。在每个实体标签上显式设置 rootEntity="true" 也不会改变任何东西。结果仍然是导入后我只有 10000 个文档,而不是预期的 17000 个。