如何将两个字段的数据复制到Solr上的一个字段
我有一份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
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>