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

如何将两个字段的数据复制到Solr上的一个字段,solr,Solr,我有一份solr文档,其中包含Lat和Lng字段。我需要添加一个名为store的新字段,其中包含从Lat和Lng获取的数据。我试图使用copyField字段,但出现错误: 字段存储不是多值的,多个复制字段的目标(2) 以下是我的配置: <fields> <field name="lat" type="sdouble" indexed="true" stored="true" required="true" multiValued="false" /> <fi

我有一份solr文档,其中包含
Lat
Lng
字段。我需要添加一个名为
store
的新字段,其中包含从
Lat
Lng
获取的数据。我试图使用
copyField
字段,但出现错误:

字段存储不是多值的,多个复制字段的目标(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"/> 


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

您可以尝试将
存储
设置为
多值

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

在没有上下文的情况下回答问题:

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

答案当然是肯定的。示例模式这样做是为了将多个字段复制到一个公共“文本”字段(多值),以简化按一个字段进行搜索


但从更多的上下文来看,您实际上要做的是确定Solr的schema.xml和copyField是否可以接受一对字段(在您的例子中是lat和lon)并用中间逗号将它们连接到特定字段。答案是否定的。在将数据提供给Solr时,您必须以这种方式准备数据,如果您使用的是DIH(DataImportHandler),则必须使用DIH转换器。我不太愿意提出替代方案,但作为黑客,您可以尝试将lat和lon放入store_0_坐标和store_1_坐标(或者可能是另一种方式)。但实际上,这不是一种推荐的方法,即使它可能有效。

您可以尝试类似的方法:


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

也许它已经过时,但您可以使用“updateRequestProcessorChain”


拉特
液化天然气
商店
商店
;

如果我将
存储
字段设置为多值。我在索引时出错。我明白了,所以你实际上需要一个单值字段,并用其他两个字段的串联填充。对吗?我认为你不能用
copyField
指令解决这个问题。也许这个链接可以帮助你:谢谢链接,但我有另一个链接在我的情况下,
store
字段是
solr.LatLonType
type,我需要将
lat,lng
设置为单个值。我可以用“UpdateRequestProcessor”来完成吗“?你完全可以写一个URP来完成它。这是URP的一个很好的用途。谢谢。我正在从*.csv文件加载数据,*.csv文件中有3列postcode、lat、lng。你能帮我配置URP吗?我建议你看看这个,看看Solr代码中现有的一个,看看它是如何从solrconfig.xml配置自己的。你能给我一个简短的例子吗?如果你看到我没有解决这个问题。
<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>