代码之家  ›  专栏  ›  技术社区  ›  Alnitak

使用复合主键的Solr DIH delta导入?

  •  6
  • Alnitak  · 技术社区  · 14 年前

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

    query

    文档建议我需要两个查询-一个查询更改行的主键,另一个查询然后实际检索每个键对应的单个文档。但是没有一个例子显示复合键是这样的。

    我根本不想要这两个单独的查询,如果这两个查询简单地组合在一起,那么这两个查询之间唯一的区别就是 deltaQuery WHERE last_changed .

    所以,如果我的主 查询 是:

    SELECT key1 || key2 as pk FROM table
    

    德尔塔查询 (和/或 deltaImportQuery

    我试着加上 哪里 子句,但是在查询运行之后,我收到了一个关于丢失的警告 deltaImportQuery 然后是一个空指针异常。

    3 回复  |  直到 13 年前
        1
  •  3
  •   Alnitak    12 年前
    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是文本。周围的单引号${数据导入器.delta.key2}例如,如果key2是数字,则不需要。

        2
  •  0
  •   Eva Lacy    12 年前

    将deltaQuery设置为“select1”,这将触发deltaImportQuery 然后用'${dataimporter.last_index_时间}'在where子句中

        3
  •  -1
  •   Yurish    14 年前

    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的重要部分是${数据导入器.delta.id}. 这就是我们如何将id从deltaQuery设置为deltaImportQuery。

    推荐文章