我的任务是扩展医学信息数据库,使其包括用于搜索患者数据的其他功能。现有的数据库使用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种不同的架构方法:
field name="weight" type="float" indexed="true" stored="true" multiValued="true"
field name="visit" indexed="true" stored="true" multiValued="true"
visit
{
date
weight : float
systolic blood pressure : int
HbA1c : float
}
"visit-date:01012019|weight:float|height:float|HbA1c:float"
任何模式帮助将不胜感激!
答案 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分组来处理其中一些问题,但是仍然需要一些思考。