6

我的 Solr 数据源是一个 SQL 数据库,其中主键是复合的(即,它是两个字段)。

这对我的主要 DIH 来说很好query,我只是连接字段,这成为我的 Solr 主键。但是,从文档中不清楚我将如何编写一个 delta-import 查询来支持这一点。

该文档建议我需要两个查询 - 一个用于查找更改行的主键,另一个用于实际检索与这些键中的每一个对应的单个文档。虽然没有显示复合键的示例。

理想情况下,我根本不想要这两个单独的查询,如果将这两个查询简单地组合起来,那么query和之间的唯一区别deltaQuery就是WHERE过滤基于last_changed.

所以,如果我的主要query是:

SELECT key1 || key2 as pk FROM table

相关的deltaQuery(和/或deltaImportQuery)会是什么样子?

我尝试只添加WHERE子句,但在查询运行后,我收到一个关于丢失的警告deltaImportQuery,然后是一个空指针异常。

4

3 回答 3

3
query="SELECT key1 || key2 as id, ...other fields FROM table"

deltaImportQuery="SELECT key1 || key2 as id, ... other fields
                  FROM table
                  where key1 = '${dataimporter.delta.key1}'
                  and key2 = '${dataimporter.delta.key2}'"

deltaQuery="SELECT key1 || key2 as id, key1, key2
            FROM table
            WHERE lastUpdated > '${dataimporter.last_index_time}'"

假设 key1 和 key2 是文本。例如,如果 key2 是数字,则不需要 ${dataimporter.delta.key2} 周围的单引号。

于 2012-04-11T17:28:59.573 回答
0

将您的 deltaQuery 设置为“选择 1”,这将触发 deltaImportQuery 然后只需在 where 子句中使用 '${dataimporter.last_index_time}' 编写您的 deltaImportQuery

所以 deltaQuery="select 1" deltaImportQuery="select * from a_table where lastUpdated > '${dataimporter.last_index_time}'"

于 2012-02-24T11:33:04.313 回答
-1

deltaImport 有两个查询。第一个(deltaQuery)用于确定要索引的内容。例如,我们可以在其中定义我们需要索引的 ID。另一个是用于从这个 id 中确定数据。看看我的例子,希望对你有帮助:

<entity name="address" pk="address_id" query="SELECT * FROM address a" deltaImportQuery="SELECT * FROM address a where a.address_id > ${dataimporter.delta.id}"
            deltaQuery="select address_id as id from address where address_id=101010">

deltaImportQuery 的重要部分是 ${dataimporter.delta.id}。这就是我们将 id 从 deltaQuery 设置为 deltaImportQuery 的方式。

于 2009-12-23T08:50:52.683 回答