Solr,通过JSON添加一个带有多值字段和增值的记录

时间:2013-02-06 01:36:45

标签: solr

我对Solr很新,我正在尝试添加一个多值字段,其中为每个值定义了boost值,所有这些都是通过JSON定义的。换句话说,我希望这可以工作:

[{ "id": "ID1000",
  "tag": [ 
    { "boost": 1, "value": "A test value" }, 
    { "boost": 2, "value": "A boosted value" } ]
}]

我知道如何在XML中执行此操作(多个<field name = 'tag' boost = '...'>),但上面的JSON代码不起作用,服务器说“解析JSON字段值时出错。意外的OBJECT_START”。 Solr有限制/错误吗?

PS:我修复了原本缺失的']',这不是问题。

编辑:似乎要走的路应该是有效载荷(http://wiki.apache.org/solr/Payloads),但我无法让它们在Solr上工作(紧随其后:http://sujitpal.blogspot.co.uk/2011/01/payloads-with-solr.html)。让问题保持开放,看看是否有人可以提供进一步的帮助。

5 个答案:

答案 0 :(得分:4)

Solr Relevancy FAQ - Query Elevation Component部分

中找到以下句子
  

multiValued字段值的索引时间提升适用于该字段的所有值。

我不认为在多值字段中为每个值添加单独的提升功能。我知道Xml会允许它,但我猜它可能只应用应用于该字段的最后一个值的提升值。

基于此,我会将Json更改为以下内容,看看是否有效。

[
    {
        "id": "ID1000",
        "tag": {
           "boost": 2, 
           "value": [ "A test value", "A boosted value"]
         }
    }
]

答案 1 :(得分:0)

JSON似乎无效,错过了结束]

[
    {
        "id": "ID1000",
        "tag": [
            {
                "boost": 1,
                "value": "A test value"
            },
            {
                "boost": 2,
                "value": "A boosted value"
            }
        ]
    }
]

答案 2 :(得分:0)

你遇到了一个边缘案例。您可以对单个值进行增强,并且可以拥有一组值。但不是另一个(来自my reading of Solr 4.1 source code

这可能属于create as an enhancement request

如果您手动生成JSON,可以尝试:

"tag": { "boost": 1, "value": "A test value" }, 
"tag": { "boost": 2, "value": "A boosted value" }

我相信Sols会合并这些价值观。但是,如果您通过框架生成它,它很可能会禁止或覆盖多个对象属性名称(此处为标记)。

答案 3 :(得分:0)

该错误与提升无关。 我用一个非常简单的json doc得到了同样的错误。 没有运气解决它。 见Solr errors when trying to parse a collection: Error parsing JSON field value. Unexp ected OBJECT_START

答案 4 :(得分:0)

我点击了同样的错误信息。实际上错误消息是错误的。根本的真正错误是在json有效负载中缺少solr配置中的schema.xml所需的两个字段。

“文档中缺少必需参数”的错误消息在这里会更有帮助。您可能想要检查json有效负载中是否缺少某些必填字段。