在 Solr 运行 中针对文档组而不是单个文档进行文本搜索
In Solr run text search against document groups instead of individual documents
我有一个包含患者医疗笔记的 Solr 索引。虽然索引是围绕笔记构建的,但我们通常对患者感兴趣。我通常使用 group
和 facet
功能按患者对搜索结果进行分组。这种方法通常效果很好,但也有一种情况效果不佳。
假设我想要一份包含与 'arthritis' 和 'Lipitor' 相关注释的所有患者的列表。我可以这样进行群组搜索:
q = NOTE:(arthritis AND lipitor)
facet = true
facet.field = PATIENT_ID
但这只会匹配至少有一个注释在同一注释中包含这两个术语的患者。我真正想要的是至少有一张笔记包含 'arthritis' 和至少一张笔记包含 'lipitor' 的患者。我不在乎这些术语是否一起包含在同一个注释中。
Solr 有没有办法做到这一点?
有:使用嵌套文档,父文档是患者,子文档是笔记。
我建议您使用最新的 Solr 版本,因为这是一个一直在改进的功能(并且还有一些补丁正在开发中)
使用此设置有一些缺点(通常灵活性稍差),但我认为对于您的用例来说效果很好。
对于文档:
嵌套文档可以工作,但还有另一种无需更改数据库本身即可实现的方法。以下将正确 return 患者至少有一个注释包含 'arthritis' 和至少一个注释包含 'lipitor'.
q = arthritis
fq = {!join from=PATIENT_ID to=PATIENT_ID}lipitor,
df = NOTE
facet = true
facet.field = PATIENT_ID
我有一个包含患者医疗笔记的 Solr 索引。虽然索引是围绕笔记构建的,但我们通常对患者感兴趣。我通常使用 group
和 facet
功能按患者对搜索结果进行分组。这种方法通常效果很好,但也有一种情况效果不佳。
假设我想要一份包含与 'arthritis' 和 'Lipitor' 相关注释的所有患者的列表。我可以这样进行群组搜索:
q = NOTE:(arthritis AND lipitor)
facet = true
facet.field = PATIENT_ID
但这只会匹配至少有一个注释在同一注释中包含这两个术语的患者。我真正想要的是至少有一张笔记包含 'arthritis' 和至少一张笔记包含 'lipitor' 的患者。我不在乎这些术语是否一起包含在同一个注释中。
Solr 有没有办法做到这一点?
有:使用嵌套文档,父文档是患者,子文档是笔记。
我建议您使用最新的 Solr 版本,因为这是一个一直在改进的功能(并且还有一些补丁正在开发中)
使用此设置有一些缺点(通常灵活性稍差),但我认为对于您的用例来说效果很好。
对于文档:
嵌套文档可以工作,但还有另一种无需更改数据库本身即可实现的方法。以下将正确 return 患者至少有一个注释包含 'arthritis' 和至少一个注释包含 'lipitor'.
q = arthritis
fq = {!join from=PATIENT_ID to=PATIENT_ID}lipitor,
df = NOTE
facet = true
facet.field = PATIENT_ID