0

以电子商务商店为例,该商店在不同的 Web 服务中具有目录和价格数据。现在,我们知道 solr 不允许对文档字段进行部分更新(JIRA 错误),那么您如何索引这两个服务呢?我有三种可能性,但我不确定哪一种是正确的:

  1. 部分更新 - 不可能
  2. Solr 加入 - 将价格和目录放在单独的索引中,并将它们加入solr。您不能将它们加入您的客户端代码,而不会搞砸分页和方面计数。我不知道这在 pre-solr 4.0 中是否可行

  3. 有某种中间索引服务,它根据这两个服务的结果组成整个文档并将其发送以进行索引。但是这种方法有两个问题:

    3.1 您仍然可以部分地撰写文档,然后当文档完成时,您可以设置一个标志,表明这是一个完整的文档。但是,每次必须对文档进行索引时,都必须先检查该文档是否存在于索引中,然后对其进行编辑并将其推回。因此,性能受到很大影响。3.2 你的中间服务检查一个特定的 id 是否可以从所有的服务中获得——如果不是静默地丢弃它,并希望当它出现在另一个服务中时,第一个服务已经被填充。这没关系,但这意味着在所有字段都可用之前,搜索中的项目不可用(总是不可取 - 如果您没有价格,您可以简单地将其设置为缺货并仍然可用)

在所有这些方法中,只有#3.2 对我来说是可行的——有人知道你是如何用 DIH 做这种事情的吗?因为现在,您有两个不同的入口点(2 个不同的 Web 服务)进入索引,并且每个都必须检查另一个

4

2 回答 2

0

解决这个问题的常用方法接近于您的 3.2:编写代码来创建您想要从不同的可用服务索引的文档。通常的流程是从目录中获取所有项目,然后在索引时获取价格。您是否希望从目录中搜索没有可用价格的项目取决于您的服务业务规则。如果您想加快流程(获取产品、获取价格、重复),请扩展 API 以获取 1000 个产品,然后同时为所有产品定价。

如果某个项目没有价格,则没有理由从索引中删除它,除非您不希望索引中没有价格的项目。在为文档编制索引之前,您需要获得什么样的信息,这取决于您和您的特殊需要。

据我所知,4.0 可能会支持部分更新,因为它会移动到索引文件的新抽象层,尽管我不确定它是否会让您的情况更加灵活。

于 2012-03-25T22:12:23.570 回答
0

方法 3.2 是最常见的,尽管我对它的看法略有不同。首先,考虑一下您想要在搜索结果中得到什么,然后为每个可能的结果创建一个 Solr 文档,其中包含尽可能多的信息。如果可以缺少价格,则以这种方式添加文档。

您可能还想匹配 Solr 中的文档,但要从 Web 服务获取最新数据以进行显示。这提供了新的结果并避免了对 Solr 的批量更新和实时数据之间的偏差。

不要为要添加到 Solr 和 Lucene 的细粒度更新而屏住呼吸。它从没有记录级锁定和更新中获得了很大的速度。

于 2012-03-28T21:01:10.147 回答