【问题标题】:How to index typed relationships in Solr/Lucene如何在 Solr/Lucene 中索引类型关系
【发布时间】:2024-01-24 10:25:01
【问题描述】:

有两个实体可以通过类型化的方式相互关联。我必须如何对这些表进行非规范化和索引以在 Solr/Lucene 中按特定实体 B 和关系类型搜索实体 A?

例如,假设有实体organisationperson 由下表链接:

-------------------------------------------
|  link_type | person      | organisation |
-------------+-------------+---------------
|  Founder   | Elon Musk   | SpaceX       |
|------------+-------------+--------------|
|  Chairman  | Elon Musk   | SolarCity    |
|------------+-------------+--------------|
|  Founder   | Lyndon Rive | SolarCity    |
|------------+-------------+--------------|
|  Founder   | Elon Musk   | Tesla        |
-------------------------------------------

我希望能够搜索 Elon Musk 创立的所有组织。预期的文档结果是:

[SpaceX, Tesla]

【问题讨论】:

    标签: indexing solr lucene relationship denormalization


    【解决方案1】:

    两种可能的解决方案;将每一行索引为单个文档,然后只需查询link_type:Founder AND person:Elon\ Musk

    第二个选项是使用动态的多值字段,每个组织的名称中都带有link_type

    link_type_Founder:Elon\ Musk
    

    返回的文档是该人具有给定link_type的组织。

    【讨论】:

    • 非常感谢建议的方法!任何解决方案都有主要优点或缺点吗?
    • 除非行数会成为问题,否则我会选择第一个。这是最不复杂的。一个常见的策略是对同一数据集也使用多个集合/核心以允许不同的查询;即,您可以拥有两个具有不同实现的内核来回答不同的查询(其中分面或其他操作的要求可能不同)。