【发布时间】:2012-11-06 10:59:55
【问题描述】:
我正在尝试将多个数据库索引到一个 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 个文档必须包含在其中的实体中,而其余的只有一个。
我试图必须在配置文件中记录元素,但这导致只导入了一个(可能是因为两个文档元素具有相同的名称,即 document name="myDocName" 的配置相同)。
此时我被卡住了,不知道如何正确配置它。我唯一能想到的就是我必须分别索引两个数据库,但我也不清楚这方面的工作流程。任何帮助将不胜感激。
更新 1: 我尝试为这两个实体指定不同的名称(无论如何,根据文档,这是必需的),但这会导致以下行为。第一个文档从第一个数据库添加,接下来前 N 个现有文档被第二个数据库中的文档覆盖,其中 N 是第二个数据库中的记录数。显然这不是我想要的,我想要 N 个 additional 文档。在配置中添加第二个文档元素似乎也不起作用。
更新 2: 根据此错误报告中的 cmets:https://issues.apache.org/jira/browse/SOLR-895,文档标记中的根实体应该为这些实体生成新文档。这不是我正在发生的事情。在每个实体标签上显式设置 rootEntity="true" 也不会改变任何东西。结果仍然是导入后我只有 10000 个文档,而不是预期的 17000 个。
【问题讨论】:
标签: solr configuration-files multiple-databases