我的Solr数据源是一个SQL数据库,其中主键是复合的(即它是两个字段)。
这对我的主要DIH query
来说很好,我只是连接字段,这就成了我的Solr主键。但是从文档中我不清楚如何编写delta-import查询来支持这一点。
文档建议我需要两个查询 - 一个用于查找已更改行的主键,另一个用于查找与每个键对应的单个文档。但是,没有示例显示复合键。
理想情况我根本不需要这两个单独的查询,如果简单地将这两个查询组合在一起,那么query
和deltaQuery
之间的唯一区别就会减少对数据库的负担。 WHERE
是基于last_changed
过滤的query
子句。
所以,如果我的主SELECT key1 || key2 as pk FROM table
是:
deltaQuery
相关的deltaImportQuery
(和/或WHERE
)会是什么样的?
我尝试添加deltaImportQuery
子句,但在查询运行后,我收到了关于缺少{{1}}的警告,然后是空指针异常。
答案 0 :(得分: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}周围的单引号。
答案 1 :(得分:0)
将deltaQuery设置为“select 1”,这将触发deltaImportQuery 然后在where子句中用'$ {dataimporter.last_index_time}'编写deltaImportQuery
所以deltaQuery =“选择1” deltaImportQuery =“select * from a_table where lastUpdated>'$ {dataimporter.last_index_time}'”
答案 2 :(得分:-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。