【问题标题】:Static field for document in Data Import Handlerfor SolrSolr 的数据导入处理程序中文档的静态字段
【发布时间】:2014-01-05 16:28:57
【问题描述】:

我正在通过以下方式从 db 在 solr 中创建索引:

<document name="Index">  

<entity name="c" query="SELECT * FROM C">  

  <field column="Name" name="name"/>  

</entity>  

<entity name="p" query="SELECT * FROM P">  

  <field column="Name" name="name"/>  

</entity>  

</document>  

是否可以为每一行设置一个静态字段,表示返回给客户端的类型,以便可以根据 json 结果中的信息调用正确的数据库表?

即表中没有列的字段

<field name="id" value="1"/> 

或者还有其他方法可以解决这个问题吗?

【问题讨论】:

  • 您的意思是您希望 C 中的所有文档都具有值 1,而 P 中的所有文档都具有值 2?
  • 如果你能更好地解释你的文档,你可能会得到更多的意见。 “行”或“静态字段”可以表示与 Solr 文档相关的任意数量的事物。包括一个您尝试创建的示例文档,因为它可以帮助您清楚地提出问题。
  • 是的,这就是我的意思

标签: solr dataimporthandler


【解决方案1】:
<document name="Index">  
<entity name="c" transformer="TemplateTransformer" query="SELECT * FROM C">  
  <field column="Name" name="name"/>  
  <field column="id" template="1"/>  
</entity>  
<entity name="p" transformer="TemplateTransformer" query="SELECT * FROM P">  
  <field column="Name" name="name"/>  
  <field column="id" template="1"/>  
</entity>  
</document> 

【讨论】:

    【解决方案2】:

    您可以在 SQL 查询中添加一个包含静态数据的列,如下所示:

    <document name="Index">  
      <entity name="c" query="SELECT *, 'foo' as NameFromC FROM C">  
        <field column="NameFromC" name="name"/>
      </entity>
    
      <entity name="p" query="SELECT *, 'bar' as NameFromP FROM P">  
        <field column="NameFromP" name="name"/>
      </entity>  
    </document>
    

    如果您尝试添加仅具有 nametemplate 属性的字段,Solr 将抛出错误提示 字段必须具有列属性

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多