Hello,
Solr is trying to process non-existing child/nested entities. By
non-existing I mean that they exist in DB but should not be at Solr side
because they don't match the conditions in the query I use to fetch them.
I have the below solr data configuration. The relationship between tables
is complicated, but the point is that I need to fetch child/nested entities
and perform some calculations at query time. My problem is that some
products have onSite services that are not enabled. I would expect Solr
from ignoring those elements because of the conditions in the query. If I
turn debug on when importing, I can see that all fields are null. However,
Solr still tries to process them, which results in invalid SQL queries
because it replaces null fields with nothing.
<entity name="product" query="SELECT p.id AS productId,
CONCAT(unitPrice,',',currency) AS unitPriceCurr FROM products p LEFT JOIN
companies c ON c.id=p.companyId WHERE h.enabled=true">
<entity name="serviceTypes"
query="SELECT s.serviceType, sl.language FROM services s
LEFT JOIN serviceLanguages sl ON s.id=sl.serviceId WHERE
companyId=${product.companyId} AND s.enabled=true">
<field column="serviceType" name="services" />
<field column="language" name="languages" />
</entity>
<entity name="onSite"
query="SELECT s.id, s.enabled, ${product.unitPrice} +
(hourlyPrice * MIN(hours)) AS onSitePriceRaw, CONCAT(${product.unitPrice} +
(hourlyPrice * MIN(hours)), ',', '${product.currency}') AS onSitePrice FROM
services s LEFT JOIN serviceHourlyPrices shp ON s.id=shp.serviceId WHERE
companyId=${product.companyId} AND s.enabled=true AND s.serviceType='OS'">
<field column="onSitePrice" name="onSitePrice" />
<entity name="fullReducedOnSitePrice"
query="SELECT CONCAT(${onSite.onSitePriceRaw} * (1 -
percentage), ',', '${product.currency}') AS fullReducedOnSitePrice FROM
discounts WHERE companyId=${product.companyId} AND category='FULL'">
<field name="fullReducedOnSitePrice"
column="fullReducedOnSitePrice"/>
</entity>
<entity name="partialReducedOnSitePrice"
query="SELECT CONCAT(${onSite.onSitePriceRaw} * (1 -
percentage), ',', '${product.currency}') AS partialReducedOnSitePrice FROM
discounts WHERE companyId=${product.companyId} AND category='PARTIAL'">
<field name="partialReducedOnSitePrice"
column="partialReducedOnSitePrice"/>
</entity>
</entity>
</entity>
The problem seems to be related to the condition s.enabled=true in the
query, because are rows with enabled=false that are causing problems (Solr
interprets them as rows with all fields null). I get an invalid SQL query
SELECT CONCAT( * (1 - percentage), ',', 'USD') AS fullReducedOnSitePrice
FROM discounts WHERE companyId=65.
How can I force Solr to ignore, as it should, those elements?