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

使用Lucene索引和搜索我的数据的最佳方式是什么?,lucene,lucene.net,faceted-search,Lucene,Lucene.net,Faceted Search,我在SO和其他网站上发现了多个问题,它们提出了类似“如何在Lucene中索引并搜索关系数据”的问题。这些问题都得到了标准的回答,Lucene并不是为这样的数据建模而设计的。我找到的这句话概括了 Lucene索引是一个文档存储。在文档存储中,单个 文档表示一个概念,其中存储了所有必要的数据 表示该概念(与正在传播的相同概念相比) 跨RDBMS中的多个表,需要多个连接到 重新创建) 所以我不会问这个问题,而是提供我的高级需求,看看是否有Lucene大师可以帮助我 我们有关于人的数据(姓名、性别、出

我在SO和其他网站上发现了多个问题,它们提出了类似“如何在Lucene中索引并搜索关系数据”的问题。这些问题都得到了标准的回答,Lucene并不是为这样的数据建模而设计的。我找到的这句话概括了

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

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

  • 我们有关于人的数据(姓名、性别、出生日期、国籍等)
  • 和公司数据(名称、国家、城市等)
  • 我们也有关于这两类实体在公司工作时如何相互关联的数据(个人、公司、角色、开始日期、结束日期等)
我们有两个实体——个人和公司——它们有自己的属性,然后它们之间存在多对多链接的属性

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

  • 查找澳大利亚的所有公司
  • 查找两个日期之间出生的所有人
  • 查找所有曾担任.Net开发人员的人员
  • 查找所有曾在伦敦担任.Net开发人员的男性
  • 查找2008年至2010年间担任.Net开发人员的所有人员
标准涵盖所有三组数据。我们的要求是对数据提供一个可接受各种属性的任意组合的集合,我已经给出了一些例子

我想用这个。我们是一家.Net软件公司,因此对java感到有点害怕。不过,欢迎所有建议

我知道索引的构建应该考虑到搜索。但是,我似乎无法找到一个合理的索引来满足所有搜索条件的组合

  • Lucene本机的类或我们可以使用的扩展点
  • 做这类事情有既定的技巧吗
  • 有没有我错过的第三个开源贡献对我们有帮助

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

要在单个索引中存储公司和人员,您可以创建带有
类型
字段的文档,该字段标识所描述的实体类型

生日可以存储为日期字段

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


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

谢谢@larsmans。实际上,我们已经考虑过这种指数结构,但我想知道你是否可以帮助我解决我如何解释结果的问题。我会更新我的问题…实际上,在我这么做之前。如何查看存储在公司旁边的角色,这些角色已经是Person文档的一部分?每个公司/角色对都必须是独立的,这样才能正确地确定两者的匹配-当然还有角色的开始/结束日期。您认为是否需要第三种文档类型的“角色”,如果需要,我们将如何将它们“链接”在一起?一种选择是,每个公司/角色对实际上都建模为一个值。[公司X角色]->例如int。将其存储在多值字段中。让你的客户知道如何编码/解码,等等。目前没有每个角色的开始/结束答案。也许这会有助于指定您可能会遇到的查询,其中包括这些角色x开始/结束日期组合Hanks Geert-Jan。我接受您关于公司/角色多值字段的建议,但我似乎无法理解如何将其与多个概念文档类型结合起来进行查询。您是否建议查询将返回这两种类型的文档,然后我必须对它们进行后期处理以筛选我想要的文档。我回到找到“所有在伦敦作为.Net开发人员工作过的人”的例子。Net开发将是Person文档类型的一部分,而London将是公司文档类型的一部分。我可以创建一个只返回个人文档的查询吗?我不认为Lucene.Net(或任何其他文本搜索引擎)非常适合您的需要。也许你应该使用
嵌入式数据库
考虑在Lucene网上问这个问题-user@a.o邮寄listI second@Prescott的建议。这是一个友好的列表,如果你提供足够好的信息(你在这里做到了),他们愿意提供帮助。1建议(现在没有太多时间)你说:“但我似乎无法想出一个合理的索引来满足所有搜索条件的组合。”。。那真的没有必要。如果无法使其与1个概念性文档类型一起使用。。(例如:公司扁平化的人)使用2(公司扁平化的人)等。。(顺便说一句,过于简化)。我对.Net端口一无所知。如果我是你,我会在问题列表中省略这一点,继续说:只是为了得到最好的解决方案。之后,您可以随时检查.net变体是否支持它。(或者,如果在规范范围内,您可能会将java变体作为一个独立服务器运行,只是通过http从.net进行通信。)非常感谢邮件列表的建议。我也问过了。