Apache Solr无法存储嵌套的JSON数据

时间:2017-07-08 09:46:50

标签: java json apache solr solr6

我正在尝试使用文档上传部分

将以下数据加载到现有的SOLR(6.6)核心中
   {
    "id": "1234",
    "nationality":"India",
    "phonenumber":"232323",
    "personname":"babu rao",
    "paid":"credi card",
    "status":"success",
    "access" :[
      {"port":"port1","gate":"Gate1"}
    ],
    "approved_by":[
      {"name":"appr1","date":"2006-11-30"},
      {"name":"appr2","date":"2006-11-30"}
    ]
  }

我这个项目的架构是

 <field name="created_date" type="tdate" indexed="true" stored="true" />
 <field name="passType" type="string" indexed="true" stored="true" />
 <field name="duration" type="int" indexed="true" stored="true" />
 <field name="nationality" type="string" indexed="true" stored="true" />
 <field name="phonenumber" type="string" indexed="true" stored="true" />
 <field name="personname" type="string" indexed="true" stored="true" />
 <field name="paid" type="string" indexed="true" stored="true" />
 <field name="passamount" type="float" indexed="true" stored="true" />
 <field name="status" type="string" indexed="true" stored="true" />
 <field name="approved_by" type="string" indexed="true" stored="true" multiValued="true"/> 
 <field name="approved_by.name" type="string" indexed="true" stored="true" />
 <field name="approved_by.date" type="tdate" indexed="true" stored="true" />
 <field name="access" type="string" indexed="true" stored="true" multiValued="true"/> 
 <field name="access.port" type="string" indexed="true" stored="true" />
 <field name="access.gate" type="string" indexed="true" stored="true" />

我收到以下错误

Error parsing JSON field value. Unexpected OBJECT_START at [177], 
field=access

请求您的帮助以解决此问题。

1 个答案:

答案 0 :(得分:1)

_childDocuments _ 键需要在JSON中指明嵌套文档。我已经更新了文档,现在它将被索引。

{
    "id": "1234",
    "nationality":"India",
    "phonenumber":"232323",
    "personname":"babu rao",
    "paid":"credi card",
    "status":"success",
    "_childDocuments_" :[
      {"id":456,"port":"port1","gate":"Gate1"},
      {"id":786,"name":"appr1","date":"2006-11-30"},
      {"id":232,"name":"appr2","date":"2006-11-30"}
    ]
  }

此外,您需要更改schema.xml [<强> Schema.xml的

<field name="created_date" type="tdate" indexed="true" stored="true" />
 <field name="passType" type="string" indexed="true" stored="true" />
 <field name="duration" type="int" indexed="true" stored="true" />
 <field name="nationality" type="string" indexed="true" stored="true" />
 <field name="phonenumber" type="string" indexed="true" stored="true" />
 <field name="personname" type="string" indexed="true" stored="true" />
 <field name="paid" type="string" indexed="true" stored="true" />
 <field name="passamount" type="float" indexed="true" stored="true" />
 <field name="status" type="string" indexed="true" stored="true" />
 <field name="name" type="string" indexed="true" stored="true" />
 <field name="date" type="tdate" indexed="true" stored="true" />
 <field name="port" type="string" indexed="true" stored="true" />
 <field name="gate" type="string" indexed="true" stored="true" />

欲了解更多信息,您可以查看Yonik的这篇文章: - http://yonik.com/solr-nested-objects/