如何使用db-data-config.xml配置solr以索引来自多个源的文档

时间:2012-11-06 10:59:55

标签: solr configuration-files multiple-databases

我正在尝试将多个数据库索引到一个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个文件。

1 个答案:

答案 0 :(得分:2)

我想你有唯一的密钥冲突。您是否在两个不同的数据库中拥有相同的ID?尝试将查询更改为

 - ds1 - "SELECT "ds1" || id AS id, field1, field2 FROM table1"
 - ds2 - "SELECT "ds2" || id AS id, field1, field2 FROM table2"

我会删除多线程选项(threads =“4”),与单线程案例相比,没有真正显着的性能提升,并且它不是很稳定(在4.0版本中已被删除)。