Sql ApacheSolr:如何使子实体中的查询执行依赖于主实体中的字段
如何使子实体中的查询执行依赖于字段 来自主实体的值 因此,正如您在下面的简化数据配置中所看到的,有一个实体 类别\u lvl\u 0,其中包含一个昂贵的查询。我只想执行 如果:searchobject.objecttype=115,则执行此查询 我尝试使categories_lvl_0依赖于if语句:如果${searchobject.objecttype}=115,我尝试将查询包装在BEGIN…END中,也尝试不包装在BEGIN…END中,但所有这些选项都会引发错误: 处理文件1 org.apache.solr.handler.dataimport.DocBuilder.executeOCBuilder.java:266 在 org.apache.solr.handler.dataimport.DataImporter.doFullImportDataImporter.java:422 在 org.apache.solr.handler.dataimport.DataImporter.runCmdDataImporter.java:487 在 org.apache.solr.handler.dataimport.DataImporter$1.runDataImporter.java:468 原因:java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException:无法 执行查询:如果1=115,选择slug\u nl作为slug\u nl\u 0,slug\u en 作为slug_en_0,label_nl作为label_nl_0,label_en作为label_en_0从 articlegroups ga与NOLOCK内部联接产品\u类别\u映射 pcm上的pcm.articlegroup_id=ga.id内部连接产品总成上 gp.id=pcm.artikelid,其中gp.artikelnummer='1000'和ga.catlevel=0 我如何配置它Sql ApacheSolr:如何使子实体中的查询执行依赖于主实体中的字段,sql,solr,dataimporthandler,Sql,Solr,Dataimporthandler,如何使子实体中的查询执行依赖于字段 来自主实体的值 因此,正如您在下面的简化数据配置中所看到的,有一个实体 类别\u lvl\u 0,其中包含一个昂贵的查询。我只想执行 如果:searchobject.objecttype=115,则执行此查询 我尝试使categories_lvl_0依赖于if语句:如果${searchobject.objecttype}=115,我尝试将查询包装在BEGIN…END中,也尝试不包装在BEGIN…END中,但所有这些选项都会引发错误: 处理文件1 org.apa
<dataConfig>
<dataSource name="ds-sql" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databaseName=mydb" user="myuser" password="mypwd" />
<document name="searchobjects">
<entity name="searchobject" pk="id" dataSource="ds-sql" query="SELECT c.objecttype,c.id,c.title FROM locations c UNION SELECT 115 as objecttype,c.id,c.title FROM products c">
<field name="id" column="id" />
<field name="objecttype" column="objecttype" />
<field name="title" column="title" />
<entity name="categories_lvl_0" dataSource="ds-sql" query="SELECT slug_nl as slug_nl_0,slug_en as slug_en_0,label_nl as label_nl_0,label_en as label_en_0
FROM articlegroups ga WITH (NOLOCK)
INNER JOIN products_category_mapping pcm on pcm.articlegroup_id=ga.id
INNER JOIN products gp on gp.id=pcm.artikelid
WHERE gp.artikelnummer='${searchobject.id}' AND ga.catlevel=0">
</entity>
</entity>
</document>
</dataConfig>
似乎在数据配置中编写更复杂的SQL是不可能的,所以我最终调用了一个带有参数的存储过程。在存储过程中,我可以编写更复杂的逻辑。数据配置示例:
<entity name="categories_lvl_0" dataSource="ds-sql" query="[_getSolrProductCategoriesLvl0] '${searchobject.objecttype}', '${searchobject.id}'">
</entity>
详情如下: