Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将对象从字符串展平到SolrInputDocument_Solr_Solrj - Fatal编程技术网

如何将对象从字符串展平到SolrInputDocument

如何将对象从字符串展平到SolrInputDocument,solr,solrj,Solr,Solrj,我想知道是否可以从SolrJ发布JSON/XMLStrins 我目前正在从一些消息服务接收JSON字符串形式的文档 其中一份文件如下: { "id":"1","name":"Item 1","price":10, "producer":{"id":"10","name":"Prod 1", "address": {"id":"100","city":"City 1","zipcode":95000} } } 我是否需要将此字符串转换为SolrInputDocument以将其

我想知道是否可以从SolrJ发布JSON/XMLStrins

我目前正在从一些消息服务接收JSON字符串形式的文档

其中一份文件如下:

{
  "id":"1","name":"Item 1","price":10,
  "producer":{"id":"10","name":"Prod 1",
    "address": {"id":"100","city":"City 1","zipcode":95000}
  }
}
我是否需要将此字符串转换为SolrInputDocument以将其提供给Solr

我目前正在使用SolrJ,没有看到直接向Solr提供JSON的API

(我看到Solr附带的post.jar能够将json/xml文档直接发布到Solr,我希望通过SolrJ API实现同样的行为)


如果没有这样的API,如何将字符串转换为SolrInputDocument?

您不需要将其转换为SolrInputDocument。看见

但是Solr不允许嵌套字段。您需要将JSON扁平化,即只保留标量和数组(或列表)作为多值字段。您可以这样转换它:

{
  "id":"1",
  "name":"Item 1",
  "price":10,
  "producer_id":"10",
  "producer_name":"Prod 1",
  "producer_address_id":"100",
  "producer_address_city": "city1",
  "producer_address_zipcode":95000
}
{
  "id":"1",
  "name":"Item 1",
  "price":10,
  "producer_id":"10",
  "producer_name":"Prod 1",
  "producer_address":["100", "city1", "95000"]
}
或者,您也可以将生产者地址保存在多值字段中,如下所示:

{
  "id":"1",
  "name":"Item 1",
  "price":10,
  "producer_id":"10",
  "producer_name":"Prod 1",
  "producer_address_id":"100",
  "producer_address_city": "city1",
  "producer_address_zipcode":95000
}
{
  "id":"1",
  "name":"Item 1",
  "price":10,
  "producer_id":"10",
  "producer_name":"Prod 1",
  "producer_address":["100", "city1", "95000"]
}

您应该选择哪一个取决于您的查询要求。

谢谢@arun。我无法直接添加POJO,因为我从消息传递服务获取json字符串(对应于POJO)。要将json字符串转换回POJO,我需要在应用程序中加载与消息传递服务交互的类,这将非常麻烦。所以我想,我必须手动展平我的josn弦。不确定如何管理schema.xml。你知道有什么库/工具可以为我做到这一点吗?另外,请建议是否可以使用“.”而不是“u”来扁平化json?schema.xml需要根据您的搜索要求进行设计。我不确定是否有任何工具可以为您自动生成模式,但即使它们存在,您也需要决定您的搜索需求。对字段名使用
而不是
作为单词分隔符应该可以。Solr允许嵌套字段。@rjurney 2013年回答了这个问题:-)。请随意在下面添加您自己的答案。