如何将对象从字符串展平到SolrInputDocument
我想知道是否可以从SolrJ发布JSON/XMLStrins 我目前正在从一些消息服务接收JSON字符串形式的文档 其中一份文件如下:如何将对象从字符串展平到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以将其
{
"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年回答了这个问题:-)。请随意在下面添加您自己的答案。