【问题标题】:solr delta import handling deletion of documentssolr delta import 处理删除文件
【发布时间】:2023-04-08 06:49:02
【问题描述】:

我有两个表通过列“product_code”连接。

  1. 产品
  2. product_retailer_map

我的 SQL 查询:SELECT products.*, COUNT(product_retailer_map.product_code) FROM products LEFT JOIN product_retailer_map ON product_retailer_map.product_code = products.product_code GROUP BY products.product_code

每当我添加新零售商并执行增量导入时,solr 都会正确更新文档。 每当我添加新产品并执行增量导入时,solr 都会正确更新文档

但每当我删除零售商并执行增量导入时,solr 更新文档。 此外,每当我删除产品并执行增量导入时,solr 更新文档。

我还没有配置 deletedPkQuery,因为我对如何处理 2 个单独的删除感到困惑。

编辑

< entity name="products" 

query="SELECT p.*, COUNT(map.product_code) AS cnt, SUM(CASE WHEN map.retailer_availability > 0 THEN 1 ELSE 0 END) AS available_cnt FROM products AS p LEFT JOIN product_retailer_map AS map ON map.product_code = p.product_code GROUP BY p.product_code ORDER BY available_cnt DESC" 

deltaImportQuery="SELECT p.*, COUNT(map.product_code) AS cnt, SUM(CASE WHEN map.retailer_availability > 0 THEN 1 ELSE 0 END) AS available_cnt  FROM products AS p LEFT JOIN product_retailer_map AS map ON map.product_code = p.product_code WHERE p.product_id = '${dataimporter.delta.product_id}' GROUP BY p.product_code ORDER BY available_cnt DESC" 

deltaQuery="SELECT `product_id` FROM `products` WHERE ( product_id IN (SELECT product_id FROM products WHERE product_code IN (SELECT DISTINCT product_code FROM product_retailer_map WHERE updated_at > '${dataimporter.last_index_time}')) ) OR (updated_at > '${dataimporter.last_index_time}')"
>

            <field column="product_id" name="product_id"/>
            <field column="product_code" name="product_code"/>
            <field column="product_name" name="product_name"/>
            <field column="cnt" name="cnt"/>
            <field column="available_cnt" name="available_cnt"/>

        < / entity >

如果我在这里做错了,请提出建议。

另外,我认为如果我使用 2 个实体,那么我可以编写 2 个删除查询,并且问题可能会得到正确解决。

你觉得呢??

【问题讨论】:

  • 你能发布你的数据配置吗?这是您拥有所有查询和实体的 XML 部分...
  • 发布了我的数据配置作为答案,因为它超过 660 个字符。
  • 我已将您的编辑从答案移至您的问题,您的问题下方有一个编辑按钮,您应该使用该按钮,而不是回答 :)
  • 感谢 @cheffe 将我的帖子移动到适当的位置。

标签: solr document


【解决方案1】:

当您删除产品时,您的 delta 查询不会捕获删除,因为该产品不再存在于表中。为此,您需要使用 deletedPkQuery。您需要在数据库中有一个日志表或类似的表可供选择,因为您不能再从产品表中选择产品的主键。像这样的:

SELECT product_id
FROM LogProductDeletion
WHERE deleted_stamp > '${dataimporter.last_index_time}'

删除零售商后需要做什么?这是否会导致产品从 Solr 中删除?如果是这样,您可以在您的 deletedPkQuery 中使用 UNION 来获取其零售商已被删除的产品的主键。同样,您需要访问日志表以删除零售商,因为您无法再从他们的表中选择零售商。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多