【问题标题】:Howto configure solr with db-data-config.xml to index documents from multiple sources如何使用 db-data-config.xml 配置 solr 以索引来自多个源的文档
【发布时间】: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


    【解决方案1】:

    我想你有唯一键冲突。您是否在两个不同的数据库中具有相同的 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 版本中被删除)。

    【讨论】:

    • 是的,情况正是如此。感谢您指出了这一点。我们拥有的工具生成了两个不同的数据库,并且 id 字段只是两个数据库的自动增量,因此确实重叠了 id。通过使用数据库中的另一个字段进行修复,这在两个数据库中是真正唯一的。
    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多