Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ApacheSolr:如何使子实体中的查询执行依赖于主实体中的字段_Sql_Solr_Dataimporthandler - Fatal编程技术网

Sql ApacheSolr:如何使子实体中的查询执行依赖于主实体中的字段

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

如何使子实体中的查询执行依赖于字段 来自主实体的值

因此,正如您在下面的简化数据配置中所看到的,有一个实体 类别\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

我如何配置它

<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>
详情如下: