使用Lucene索引和搜索我的数据的最佳方法是什么?

时间:2011-12-13 15:31:12

标签: lucene lucene.net faceted-search

我在SO和其他地方发现了多个问题,提出了“如何在Lucene中索引然后搜索关系数据”的问题。很正确地,这些问题都得到了标准响应的满足,Lucene并不是为这样的数据建模而设计的。我发现这句话总结了......

  

Lucene Index是一个文档存储。在文档存储中,单个   document表示存储所有必要数据的单个概念   代表这个概念(与传播的相同概念相比)   在需要多个连接的RDBMS中的多个表中   重新创建)。

所以我不会问这个问题,而是提供我的高级要求,看看那里的Lucene大师是否可以帮助我。

  • 我们有关于人(姓名,性别,DOB,国籍等)的数据
  • 公司(名称,国家,城市等)的数据。
  • 我们还有关于这两种实体如何在公司工作的人员(人员,公司,角色,开始日期,截止日期等)相互关联的数据。

我们有两个实体 - 人员和公司 - 拥有自己的属性,然后存在它们之间的多对多链接的属性。

一些示例搜索可能如下...

  • 查找所有在澳大利亚的公司
  • 查找两个日期之间出生的所有人
  • 查找所有曾担任.Net开发人员的人员
  • 找到所有在伦敦担任过.Net开发人员的男性。
  • 查找所有在2008年至2010年间担任.Net开发人员的人员

标准涵盖所有三组数据。我们的要求是提供Faceted Search数据,接受各种属性的任意组合,我已经给出了一些例子。

我想用Lucene.Net来做这件事。我们是一个.Net软件公司,因此感觉受到java的轻微威胁。但是,欢迎所有建议。

我知道应该在考虑搜索的情况下构建索引。但我似乎无法提出一个能够满足所有搜索条件组合的合理指数

  • Lucene的原生类别或我们可以使用的扩展点。
  • 是否有成熟的技术来做这种事情?
  • 是否有任何我错过的第三个开源贡献对我们有帮助?

目前我不会描述我们考虑过的情景,因为我不想夸大这个问题并使其过于恐怖。请让我详细说明。

1 个答案:

答案 0 :(得分:2)

要将公司和人员存储在一个索引中,您可以使用type字段创建标识其描述的实体类型的文档。

生日可以存储为日期字段。

您可以为每个人提供一个简单的文本字段,其中包含他们所服务的公司的名称。请注意,如果您输入的索引中的文档未表示公司,则不会收到错误。 Lucene不是关系数据库工具,但你知道。

(很抱歉,我没有发布任何API的链接;我熟悉Lucene Core但不熟悉Lucene.NET。)