带日期的多值数据的Solr模式建议

时间:2019-05-02 19:13:27

标签: solr solrj

我的任务是扩展医学信息数据库,使其包括用于搜索患者数据的其他功能。现有的数据库使用Solr来存储和查询数据,例如出生日期和症状:

patient
{
   birth date : date
   symptoms:
      heart disease
      diabetes
      neuropathy
   heart disease onset : date
   diabetes onset : date
   neuropathy onset : date
}

我们想扩展此数据库,以按访问日期包括更多详细信息,例如:

patient
{
   birth date : date
   symptoms:
      heart disease
      diabetes
      neuropathy
   heart disease onset : date
   diabetes onset : date
   neuropathy onset : date
   visit date 1 : date
      weight : float
      systolic blood pressure : int
      HbA1c : float
   visit date 2 : date
      weight : float
      height : float
      systolic blood pressure : int
}

不能保证所有参数都会在所有访问中出现。目的是能够查询一段时间内的医疗数据,例如: 返回所有在5年内收缩压增加20的心脏病患者。

我是一位经验丰富的程序员,但对Solr还是陌生的。 Solr似乎不支持将日期字段附加到其他字段。我已经考虑过3种不同的架构方法:

  1. 多值字段,但我看不到它如何还可以存储关联的访问日期。
field name="weight" type="float" indexed="true" stored="true" multiValued="true"
  1. 具有访问中存储的参数的多值访问字段。我看不到Solr如何在date参数中查询。
field name="visit" indexed="true" stored="true" multiValued="true"
visit
{
   date
   weight : float
   systolic blood pressure : int
   HbA1c : float
}
  1. 使用分隔符将所有数据连接到一个字段中。
"visit-date:01012019|weight:float|height:float|HbA1c:float"

任何模式帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

在Solr中,嵌套数据只能做很多事情。您可以采用的另一种方法是分解信息,例如针对患者的Solr文档和每次访问一个Solr文档。使用您的数据,看起来或多或少如下:

patient
{
   patient-id: 123
   birth date : date
   symptoms:
      heart disease
      diabetes
      neuropathy
   heart disease onset : date
   diabetes onset : date
   neuropathy onset : date
}

visit 1
{
  patient-id: 123
  visit date: date
  weight : float
  systolic blood pressure : int
  HbA1c : float
}

visit 2
{
  patient-id: 123
  visit date: date
  weight : float
  systolic blood pressure : int
  HbA1c : float
}

这里的问题是,(全部)患者信息将通过多个Solr文档散布开来,这可能会使其他查询复杂化。您可以使用Solr分组来处理其中一些问题,但是仍然需要一些思考。