0

我是整个网络服务领域的新手,所以如果它看起来很愚蠢或很明显,请原谅这个问题!

我有许多可以由我正在创建的新 Web 服务提供的实体。其中一些实体由非常大的对象图组成。

但是,有时客户端会想要搜索其中一些实体并返回(可能很大)结果集。我认为这个结果集应该包含这些巨大实体的更轻量级的表示,而不是整个实体。毕竟,它们只会显示在 GUI 上的“找到的实体”列表中……然后单独检索。

处理这个问题的好模式是什么?我特别关心它与我的 XML 模式的关系?如果我使用与重量级表示相同的 XML 元素类型(例如使用 isSkeleton 布尔开关),那么我的所有 XML 约束都将变得无用(因为不存在子元素)。

另一方面,如果我为每个潜在的大型实体(具有自己的 XML 定义)制作一个专门的“轻量级”DTO,那么我需要在这些 DTO 和我的实体之间进行转换。

4

1 回答 1

1

不确定我是否遵循您所描述的内容,但听起来您需要执行以下操作:

  • 在搜索的上下文中,以通用方式表示不同类型的实体
  • 结果集中可能返回大量实体
  • 只需要在访问单个实体时提供进一步的深度

这听起来像是Solr的理想用途。Solr 是建立在Lucene之上的开源搜索框架。它使用 XML 作为有效负载基础,通过 HTTP 提供对基于 Lucene 的搜索索引的访问。它是面向 REST 的,也讲 JSON,所以它与语言无关。

Solr 的大多数实现都在幕后运行,可以访问网站搜索结果页面后面提供的结果。您的要求实际上可能非常适合直接公开对 Solr 服务器查询的访问。处理结果的所有元素都已处理——分页、过滤、排序等。所有你真的不想自己做的后勤工作。

作为实施者,您的真正工作是确定搜索索引中的内容。可以构建索引以保存变体实体的公共元素,并且搜索速度会非常快。在检索给定的结果集后,您的应用程序可以从其原始来源检索实体的更深层次的详细信息(如果您不想将整个实体推入搜索索引,这是另一种可能性。)

于 2010-06-23T11:58:05.943 回答