我在solr中有一个包含Lat
和Lng
字段的文档。我需要添加一个名为store
的新字段,其中包含从Lat
和Lng
获取的数据。我尝试使用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"/>
是否可以复制同一目标字段中两个字段的内容?
答案 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)