我有两个表由“product_code”列连接。
我的SQL查询:SELECT产品。*,COUNT(product_retailer_map.product_code)FROM产品LEFT JOIN product_retailer_map ON product_retailer_map.product_code = products.product_code GROUP BY products.product_code
每当我添加新零售商并执行delta导入时, solr会更新文档正确。 每当我添加新产品并执行delta导入时, solr会正确更新文档。
但是,只要我删除零售商并执行delta导入,solr 就不会更新文档。 此外,每当我删除产品并执行delta导入时,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个删除查询,可能会出现问题,这将得到正确解决。
你的想法??
答案 0 :(得分:0)
删除产品时,delta查询将无法捕获删除,因为表中不再存在该产品。您需要为此使用deletedPkQuery。您需要在数据库中有一个日志表或类似的选项,因为您无法再从products表中选择产品的主键。像这样:
SELECT product_id
FROM LogProductDeletion
WHERE deleted_stamp > '${dataimporter.last_index_time}'
删除零售商时需要做什么?这会导致产品从Solr中删除吗?如果是这样,您可以在deletedPkQuery中使用UNION来获取已删除零售商的产品的主键。同样,您需要访问日志表以便删除零售商,因为您无法再从其表中选择零售商。