Solr DIH delta-import与复合主键?

时间:2009-12-22 11:16:38

标签: solr dih

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

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

文档建议我需要两个查询 - 一个用于查找已更改行的主键,另一个用于查找与每个键对应的单个文档。但是,没有示例显示复合键。

理想情况我根本不需要这两个单独的查询,如果简单地将这两个查询组合在一起,那么querydeltaQuery之间的唯一区别就会减少对数据库的负担。 WHERE是基于last_changed过滤的query子句。

所以,如果我的主SELECT key1 || key2 as pk FROM table 是:

deltaQuery

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

我尝试添加deltaImportQuery子句,但在查询运行后,我收到了关于缺少{{1}}的警告,然后是空指针异常。

3 个答案:

答案 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。