【问题标题】:Update multivalued field, not getting multiple values in SOLR index更新多值字段,不在 SOLR 索引中获取多个值
【发布时间】:2013-09-28 20:54:22
【问题描述】:

我正在尝试通过发布 RAW JSON 数据来更新 SOLR 索引,版本为 4.4.0。

它的更新字段很好,但在多值字段的情况下,它不存储多个值,而只存储最后一个。

例如-

我。这是我的架构结构-

<dynamicField name="amenity_*"  type="text_general"  indexed="true"  stored="true" multiValued="true"/>

二。这是 POST json 数据-

   {"add":{ "doc":{"id":"7986","amenity_GENERAL":{"set":"Overnight Parking"}},"boost":1.0,"overwrite":true,"commitWithin":1000},
   "add":{ "doc":{"id":"7986","amenity_GENERAL":{"set":"Pumps"}},"boost":1.0,"overwrite":true,"commitWithin":1000},
   "add":{ "doc":{"id":"7986","amenity_GENERAL":{"set":"Parking Spaces"}},"boost":1.0,"overwrite":true,"commitWithin":1000}}

成功发帖后,此id的更新索引为-

     {
        "id": "7986",
        "amenity_GENERAL": [
          "Parking Spaces"
        ],
        "_version_": 1446999052093751300
      },

-它存储来自 JSON 请求的最后一个值-“amenity_GENERAL”。

我不确定是否需要更改该多值字段的 POST JSON 结构。

提前致谢。


编辑:这个脚本会运行到一个 CRON 中,所以每次都需要更新索引。如果是多值字段,需要避免重复值。

【问题讨论】:

    标签: json solr lucene


    【解决方案1】:

    参考:http://yonik.com/solr/atomic-updates/

    set – 设置或替换特定值,如果将 null 指定为新值,则删除该值

    add - 向列表添加附加值

    即试试

    "amenity_GENERAL":{"add":"Parking Spaces"}
    

    【讨论】:

    • 感谢您的回复。是的,使用 'add' 而不是 'set' 可以工作,但我的脚本将在 CRON 中运行,经过一定的时间间隔。我每次都想要一个完整的替换。执行“添加”只会继续将相同的值添加到数组中。有什么建议吗?提前致谢
    • 你不能使用 set 和 null 作为第一个更新来清除值,然后使用 add 来创建新条目吗?
    • "set" with null 添加空字符串。因此,对第一个条目进行“设置”,然后“添加”其他条目。但只是想知道是否还有其他更简单的方法。顺便说一句,谢谢
    • 当然,如果您知道所有值,那么只需使用"amenity_GENERAL":{"set": ["Overnight Parking", "Pumps", "Parking Spaces"]}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2016-02-04
    • 2017-08-11
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多