2013-02-06 39 views
3

我对Solr很新颖,我试图添加一个多值字段,并为每个值定义的增量值,全部通过JSON定义。换句话说,我想这个工作:Solr,通过带有多值字段的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有限制/ bug吗?

PS:我修正了最初丢失的']',这不是问题。

编辑:它似乎走的路上应该是有效载荷(http://wiki.apache.org/solr/Payloads),但我不能让他们在Solr上工作(跟随此:http://sujitpal.blogspot.co.uk/2011/01/payloads-with-solr.html)。留下问题以查看是否有人可以提供进一步帮助。

回答

0

的JSON似乎无效,缺少一个右]

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

谢谢,但这不是问题,最初我有良好的JSON(通过http://jsonlint.com/验证),只是在这里重新格式化时丢失了支架。 – zakmck

+0

你尝试完全移除外部[]吗? – Jayendra

4

Solr Relevancy FAQ - Query Elevation Component节发现下列句子中

一个多值字段的值的索引时升压应用到该字段的所有值。

我不认为增加对多值字段中每个值的单独提升是可行的。我知道Xml将允许它,但我猜测它可能只应用来自应用于该字段的最后一个值的提升值。

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

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

这是一个非常明确的解释,事实上你的版本工作,非常感谢。 但是我想知道我可以如何覆盖我的用例:我有附有标签和标签重量的文档,其中重量是衡量该标签对文档有多重要的度量。我想通过标签搜索文档,并根据查询关键词对文章(article1,sport(3),society(2),gossip(1))进行不同的评分。 是否有可能处理这种情况,以及如何? – zakmck

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" } 

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

+0

没有,这将无法正常工作。看起来有人已经注意到这个问题:https://issues.apache.org/jira/browse/SOLR-2499,但还没有修复...... :-( – zakmck

+0

看起来像相关但是单独的问题。它是说,甚至如果你设法提高这些值,它不会产生预期的效果,你说你甚至无法用JSON格式获得提升。 –

0

我碰到同样的错误信息。其实错误信息是错误的。底层真正的错误是solr配置中每个schema.xml中的两个必需字段在json有效内容中缺失。

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