【问题标题】:Denormalization of database tables for Lucene indexingLucene 索引的数据库表的非规范化
【发布时间】:2011-07-13 14:52:49
【问题描述】:

我刚开始使用 Lucene,我正在尝试为数据库编制索引,以便对内容执行搜索。我对索引感兴趣的表有 3 个:

1.图像表 - 这是一个表,其中每个条目代表一个图像。每张图片都有一个唯一的 ID 和一些其他信息(标题、描述等)。

2。人员表 - 这是一个表,其中每个条目代表一个人。每个人都有一个唯一的 ID 和其他信息,例如(姓名、地址、公司等)

3。贷记表 - 此表有 3 个字段(图像、人物和贷记类型)。其目的是将某些人与图像相关联,作为该图像的学分。每张图片可以有多个人(有导演、摄影师、道具师等)。此外,一个人在多张图片中都有功劳。

我正在尝试为这些表建立索引,以便可以使用 Lucene 执行一些搜索,但正如我所读到的,我需要展平结构。

我想到的第一个解决方案是为图像/受信人的每个组合创建 Lucene 文档。恐怕这会在索引中创建大量重复的内容(图像/人的所有细节都必须在每个文档中为每个处理图像的人复制)。

有没有使用 Lucene 经验的人可以帮助我解决这个问题?我知道反规范化没有通用的解决方案,这就是为什么我提供了一个更具体的例子。

谢谢,如果有人需要,我很乐意提供有关数据库的更多信息

PS:不幸的是,我无法更改数据库的结构(它属于客户端)。我必须使用我所拥有的。

【问题讨论】:

    标签: database lucene lucene.net denormalization


    【解决方案1】:

    您可以为每个人创建一个Document,并连接所有相关图像的描述(附加到人员信息或单独的Field)。

    或者,您可以为每个人创建一个最小的Document,为每个图像创建一个Document,将创建者的姓名和信用信息放在图像Document 的单独字段中,然后通过将人员 ID(或人员Document id)第三个非索引字段。 (Lucene 面向平面文档索引,而不是关系数据,但可以手动定义关系。)

    这实际上与您要搜索的内容(图像或人物)有关,以及每个内容是否包含足够的关键字来进行搜索。尝试几个选项,看看它们是否足够好并且不超过可用空间。

    不过,信用表可能不是 Document 构造的理想候选者。

    【讨论】:

    • 感谢您的回答。如果可能的话,我想同时搜索(图像和人物)并基于它们之间的关系。我读过手动定义文档之间的关系迫使我对结果进行额外的合并。
    • 但是,我只是在想。如果我创建 2 个索引会怎样:一个包含每个图像和处理它的人(连接),另一个索引包含每个人和他处理的图像。总是进行 2 次搜索然后以某种方式从每个搜索中选择最佳结果并合并它们会不会太过分?
    • @Andrei:制作两个索引并进行两次搜索会使事情变得复杂,因为您必须设计一种方法来进行合并。不过,在一个索引中有两种文档是可以的;如果你想两者兼得,我会走那条路。
    猜你喜欢
    • 2011-03-08
    • 2016-07-23
    • 1970-01-01
    • 2010-11-11
    • 2011-11-12
    • 2011-09-24
    • 2018-09-13
    • 2013-01-18
    • 2012-11-18
    相关资源
    最近更新 更多