对Solr输入/输出进行展平和去展平

时间:2013-11-18 23:58:48

标签: java parsing solr

我有很多具有父子关系的Java对象。

这些需要放入Solr。

为此,我们将Java对象转换为json,如下所示:

{
  "employee": {
    "name" : "John",
    "address": {
      "apt": 100,
      "city": "New York",
      "country": "USA"
    },
    "vehicles": [
      {
        "name" : "Hyundai",
        "color" : "red"
      },
      {
        "name" : "Toyota",
        "color" : "black"
      }
    ]
  }
}

既然Solr没有处理这个问题,我就把它弄平如下:

"employee.name": "John",
"employee.address.apt": 100,
"employee.address.city": "New York",
"employee.address.country": "USA",
"employee.vehicles_0.name": "Hyundai",  // Note how arrays are being flattened
"employee.vehicles_0.color": "red",
"employee.vehicles_1.name": "Toyota",
"employee.vehicles_1.color": "black",

很容易展平,但我的图书馆的客户在查询时不需要展平的架构。

所以我需要在从Solr返回时解除上面的内容并将它们转换回原始的Java对象。

有谁知道如何做到这一点?

我正在考虑采用Solr的扁平输出(如上所示)并编写解析器将字段放回Java对象。但这似乎很多工作。一个简单的出路或现有的工具将非常感激。

我正在使用Solr 4.5.1

2 个答案:

答案 0 :(得分:0)

Solr专为搜索而设计,不存储深层对象图。您可能最好优化Solr记录以进行搜索,然后通过recordID或其他方式从主存储中获取原始对象。

想想你想要找到什么。例如,您是否会搜索单个车辆?如果是,您当前的文档级别应该是车辆而不是员工。

答案 1 :(得分:0)

您可以首先在Parent-> Child结构中索引文档。

请看一下这篇博文:http://blog.griddynamics.com/2013/09/solr-block-join-support.html