我对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)。让问题保持开放,看看是否有人可以提供进一步的帮助。
答案 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有效负载中是否缺少某些必填字段。