" msg":" [doc = null]缺少必填字段:id","代码":400}

时间:2016-06-23 12:12:50

标签: apache solr

当Iam将json对象发布到apache solr 6时,通过java代码索引我得到如下错误:

错误信息如下:

  

" {"元数据":["误差级"" org.apache.solr.common.SolrException""根误差级"" org.apache.solr.common.SolrException&#34]," MSG":" [DOC =空]   缺少必填字段:id"," code":400}}"

和我的json对象如下:

"_childDocuments_" :[    
    {
      "entityname": "ReportDuplicate"
    }
  ],
"_childDocuments_" :[    
    {
      "entityname": "LinkedReport"
    }
  ],    

"_childDocuments_" :[    
    {
      "entityname": "Source"
    }
  ],
"_childDocuments_" :[
    {
      "entityname": "Literature",
"_childDocuments_" :[
        {
          "entityname": "Authors"
        }
      ]
    }
  ],
"_childDocuments_" :[

    {
      "entityname": "AdditionalInformation"
    }
  ],

我发布json对象的java代码如下:

org.apache.http.client.HttpClient client = HttpClientBuilder.create().build();

                HttpPost post = new HttpPost("http://localhost:8983/solr/icsr/update/json?wt=json&commit=true");
                StringEntity entity  = new StringEntity("{\"add\": { \"doc\":"+value+" }}", "UTF-8");

                entity.setContentType("application/json");
                post.setEntity(entity);                
                HttpResponse response = client.execute(post);
                HttpEntity httpEntity = response.getEntity();
                InputStream in = httpEntity.getContent();

                String encoding = httpEntity.getContentEncoding() == null ? "UTF-8" : httpEntity.getContentEncoding().getName();
                encoding = encoding == null ? "UTF-8" : encoding;
                String responseText = IOUtils.toString(in, encoding);
                System.out.println("response Text is " + responseText);

我使用solr 6服务器来索引来自java代码的数据: 因为我在调试时遇到了错误的HTTP请求而且我是solr的新手, 并且在managed-schema.xml文件中没有进行任何更改: thansk提前

2 个答案:

答案 0 :(得分:0)

检查您的schema.xml文件。必须有像

这样的声明
<field name="id" type="string" multiValued="false" required="true" stored="true"/>

您可以设置required=true,同时索引文档也提供其ID,或者只是制作required=false,它将100%正常工作!!如果它对你有帮助,请告诉我。

答案 1 :(得分:0)

Solr始终接受格式为2016-06-20T14:54:27.734Z的日期(这是一个示例)。 仅以YYYY-MM-DDThh:mm:ssZ这种格式发送日期,其中

  

YYYY是一年。   MM是月份。   DD是这个月的日子。   hh是24小时制的一天中的小时。   毫米是分钟。   ss是秒。   Z是字面上的&#39; Z&#39;表示该日期的字符串表示形式为UTC的字符

以此格式发送日期。这将100%工作!如果这有助于你,请告诉我。