Lucene索引的数据库表的非规范化

时间:2011-03-11 16:09:23

标签: database lucene lucene.net denormalization

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

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

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

第3。信用表 - 此表有3个字段(图像,人员和信用类型)。其目的是将某些人与图像相关联作为该图像的信用。每个图像可以有多个信誉的人(有导演,摄影师,道具艺术家等)。此外,一个人被记录在多个图像中。

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

我遇到的第一个解决方案是为每个Image / Credited Person组合创建Lucene文档。我担心这会在索引中创建大量重复内容(对于每个处理图像的人来说,每个文档中的图像/人的所有细节都必须重复。)

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

谢谢,我很乐意提供有关数据库的更多信息

PS:不幸的是,我无法改变数据库的结构(它属于客户端)。我必须和我所拥有的一起工作。

1 个答案:

答案 0 :(得分:0)

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

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

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

但是,信用表可能不是Document构建的好候选人。