我是apache Solr的新手,做了一些研究并学会了如何做索引。 目前我正面临着JSON文件索引的问题。
我无法对下面提到的JSON文件数据格式编制索引。 删除“文档”数组后,我能够做到。 不知道为什么会发生这种情况。
我没有添加任何配置schema.xml文件。 尝试使用apache solr中的一些样本,我可以进行索引。
还有什么在schema.xml文件中使用id? 如果我的json包含employeesid,我可以添加employeesid而不是“id”
[{
"employid": "E64492",
"employGroup": "ABC ABC GROUP",
"ssn": "BE0003565737",
"country": {
"countryId": "56",
"countryName": "india"
},
"sector": {
"sId": "40",
"sName": "name"
},
"documents": [{
"language": "EN",
"fileName": "Helloworld.pdf",
"fileExists": true,
"employid": "E64492"
}],
}]
请有人帮忙。
豁免详情:
"org.apache.solr.common.SolrException"],"msg":"Error parsing JSON field value. Unexpected OBJECT_START at [227], field=documents","code":400}}
答案 0 :(得分:2)
问题在the Solr Reference guide section on indexing with JSON中解释,但在所有文本中都有点难以理解。
基本上有两种方法可以处理JSON:
您使用的数组语法是第一个选项 - Solr输入格式。但是,该格式不支持嵌套文档的结构,它需要一个_childDocuments_数组。
通用JSON解析器只能占用一个对象。
所以,你处在十字路口,需要决定你想做什么。这很可能意味着要考虑您想要结束的模式,以及是否要明确地或通过映射规则来定义它。
答案 1 :(得分:1)
您必须定义与您尝试插入的文档相对应的架构。
此外,您还需要额外,
个文档
"documents": [{
"language": "EN",
"fileName": "Helloworld.pdf",
"fileExists": true,
"employid": "E64492"
}],
关于id
字段,您可以将其重命名为employe_id
,但也要记得将标记<uniqueKey>id</uniqueKey>
更改为employe_id
您还可以拥有不含unique_key
的架构。有关唯一键的详细信息,请查看this。
答案 2 :(得分:1)
Maddy你想要索引的是一个嵌套的JSON对象! Solr仅允许以FLAT格式索引JSON数据。我的意思是,Country和Sector对象无法按照您尝试的方式编制索引。您必须将它们拼合为单独的字段,即Country.countryId必须是一个单独的字段,Country.countryName必须是单独的字段。同样,Sector.sId必须是一个单独的字段,而Sector.sectorName必须是一个单独的字段。此外,最后一个文档JSON对象中的对象应该以声明employee Id的相同方式声明,您需要删除文档对象并自由地放置每个字段。我希望你明白这一点。这将100℅工作。我再说一遍,你不能像这样索引嵌套的JSON,你需要将JSON展平为最简单的。如果有帮助,请告诉我:)。为了更好地理解下面的要点,在Solr管理屏幕上,使用此JSON并尝试在“文档”部分中对其进行索引,同时通过单击F12在Chrome或其他浏览器中打开网络选项卡,您将看到与您相同的错误进入控制台!!这就是为什么你可以保持Country和Sector对象相同,但你需要删除数据对象并在其中自由声明字段。
答案 3 :(得分:0)
最后,我可以在添加下面指定的模式定义后进行索引编制
<field name="buyLimit" type="tdoubles"/>
<field name="country.countryId" type="tlongs"/>
<field name="country.countryName" type="strings"/>
<field name="creationDate" type="tlongs"/>
<field name="currency" type="string" indexed="true" stored="true"/>
***<field name="documents.fileExists" type="booleans"/>
<field name="documents.fileName" type="strings"/>
<field name="documents.language" type="strings"/>
<field name="documents.researchId" type="strings"/>***
<field name="opinion.opinion" type="strings"/>
<field name="opinion.opinionId" type="strings"/>
<field name="employeId" type="string" multiValued="false" indexed="true" stored="true"/>
<field name="s.sId" type="tlongs"/>
<field name="s.sName" type="strings"/>
<field name="type" type="string" indexed="true" stored="true"/>
感谢所有的评论,这些评论让我更了解索尔。