1

我在 SO 和其他地方发现了多个问题,这些问题类似于“我如何在 Lucene 中建立索引然后搜索关系数据”这样的问题。非常正确地,这些问题得到了标准的回答,即 Lucene 不是为这样的数据建模而设计的。我找到的这句话总结了它......</p>

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

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

  • 我们有关于人的数据(姓名、性别、出生日期、国籍等)
  • 以及有关公司的数据(名称、国家、城市等)。
  • 我们还有关于这两种类型的实体如何在一个人在公司工作时相互关联的数据(人、公司、角色、开始日期、结束日期等)。

我们有两个实体——Person 和 Company——它们有自己的属性,然后属性存在用于它们之间的多对多链接。

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

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

该标准涵盖所有三组数据。我们的要求是对接受各种属性的任意组合的数据提供分面搜索,我已经给出了一些示例。

我想为此使用Lucene.Net。我们是一家 .Net 软件公司,因此对 java 感到有些害怕。但是,欢迎所有建议。

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

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

现在我不会描述我们考虑过的场景,因为我不想夸大这个问题并让它变得太吓人。请让我在必要时详细说明。

4

1 回答 1

2

要将公司和人员存储在单个索引中,您可以创建具有type标识他们描述的实体类型的字段的文档。

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

您可以给每个人一个简单的文本字段,其中包含他们工作的公司的名称。请注意,如果您输入的公司不在索引中的文档中表示,则不会出现错误。Lucene 不是关系数据库工具,但您知道这一点。

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

于 2011-12-13T15:39:51.800 回答