如何将2个字段数据复制到Solr上的一个字段

时间:2012-06-22 10:42:35

标签: solr

我在solr中有一个包含LatLng字段的文档。我需要添加一个名为store的新字段,其中包含从LatLng获取的数据。我尝试使用copyField字段,但我收到错误:

  

字段存储不是多值和多个copyFields(2)

的目标

这是我的配置:

<fields>
  <field name="lat" type="sdouble" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="lng" type="sdouble" indexed="true" stored="true" required="true" multiValued="false" /> 
  <field name="store" type="text" indexed="true" stored="true"/>
</fields> 

<copyField source="lat" dest="store"/> 
<copyField source="lng" dest="store"/> 

是否可以复制同一目标字段中两个字段的内容?

4 个答案:

答案 0 :(得分:6)

在没有背景的情况下提出你的问题:

  

是否可以复制同一个中的两个字段的内容   目的地?“

肯定是答案是肯定的。示例模式通过将多个字段复制到公共“文本”字段(multiValued)来使一个字段的搜索更简单。

但是在查看更多上下文时,您实际上要做的是确定Solr的带有copyField的schema.xml是否可以接受一对输入字段(在您的情况下为lat和lon),并将它们与中间逗号连接到特定字段领域。答案是不。在将数据提供给Solr时,您必须以这种方式准备数据,或者如果您使用DIH(DataImportHandler),则使用DIH变换器。我犹豫是否建议一个替代方案,但作为一个黑客,你可能会尝试将lat和lon放入store_0_coordinate和store_1_coordinate(或者可能是另一种方式)。但实际上,这不是推荐的方法,即使它可能有用。

答案 1 :(得分:5)

也许它已经过时但您可以使用&#34; updateRequestProcessorChain&#34;

<updateRequestProcessorChain name="composite-position">
  <processor class="solr.CloneFieldUpdateProcessorFactory">
    <str name="source">lat</str>
    <str name="source">lng</str>
    <str name="dest">store</str>
  </processor>
  <processor class="solr.ConcatFieldUpdateProcessorFactory">
    <str name="fieldName">store</str>
    <str name="delimiter">;</str>
  </processor>
  <processor class="solr.LogUpdateProcessorFactory" />
  <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

答案 2 :(得分:2)

您可以尝试将store设置为multivalued

<field name="store" type="location" indexed="true" stored="true" multiValued="true" />

答案 3 :(得分:0)

你可以尝试这样的事情:

Two double in one location

如果可以使用DIH(数据导入程序处理程序)。希望它会有所帮助!