【问题标题】:How can copy 2 fields data to one field on Solr如何将 2 个字段数据复制到 Solr 上的一个字段
【发布时间】:2012-06-22 10:42:35
【问题描述】:

我在 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"/> 

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

【问题讨论】:

  • 如果你看到我没有解决这个问题。

标签: solr


【解决方案1】:

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

<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】:

    在没有上下文的情况下提出您的问题:

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

    答案是肯定的。示例架构通过将多个字段复制到一个公共的“文本”字段(多值)来实现这一点,从而使按一个字段进行搜索更简单。

    但是查看更多上下文,您实际上想要做的是确定 Solr 的带有 copyField 的 schema.xml 是否可以接受输入字段对(在您的情况下为 lat 和 lon),并使用中间逗号将它们连接到特定的场地。答案是不。在将数据提供给 Solr 时,您必须以这种方式准备数据,或者如果您使用 DIH(DataImportHandler),则使用 DIH 转换器。我不愿提出替代方案,但作为一种技巧,您可以尝试将 lat 和 lon 放入 store_0_coordinate 和 store_1_coordinate (或者反过来)。但实际上,这不是推荐的方法,即使它可能有效。

    【讨论】:

    • 我可以用“UpdateRequestProcessor”做这个吗?
    • 您绝对可以编写一个 URP 来完成它。这是 URP 的一个很好的用途。
    • 谢谢。我正在从 *.csv 文件加载数据,并且 *.csv 文件中有 3 列 postcode、lat、lng。你能帮我配置URP吗?
    • 我建议你看看这个wiki.apache.org/solr/UpdateRequestProcessor 并查看 Solr 代码中现有的一个,看看它是如何从 solrconfig.xml 配置自己的。
    • 你能给我一个简短的例子吗?
    【解决方案3】:

    您可以尝试将store 设置为multivalued

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

    【讨论】:

    • 如果我将store 字段设为多值。我在索引时遇到错误。
    • 我明白了,所以您实际上需要的是一个由其他两个字段的串联填充的单值字段。对吗?
    • 我不认为你可以用copyField 指令解决这个问题。也许这个链接对你有帮助:grokbase.com/t/lucene/solr-user/116fd7a7yx/…
    • 感谢您的链接,但我有另一种情况,store 字段是 solr.LatLonType 类型,我需要将 lat,lng 设置为单个值。
    【解决方案4】:

    你可以试试这样的:

    Two double in one location

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多