如何在运行时从 Solr 中过滤大量 id 列表

2023-12-22

我有一个索引products是索尔。我需要为每个客户提供定制的产品列表,这样我就必须为每个客户排除一些特定的产品。 目前,我将客户和排除产品的这种关系存储在 SQL 数据库中,然后使用术语查询在 Solr 中过滤它们。有没有一种方法可以将这种关系存储在 Solr 本身中,这样我就不必每次都先从 SQL 计算排除列表。

与我们在 elasticsearch 中使用的功能非常相似https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html

我可以想到在 Solr 中做的可能方法:

  1. 在产品索引本身中保留客户列表,并对其进行过滤。但如果我必须重新索引所有文档,这真的会很痛苦。而且这个列表可能会很大。

  2. 我能想到的另一种方法是维护一个单独的核心来保存每个客户的文档和排除的product_id,并使用 {!join} 执行联接来过滤客户的产品。它是一个可扩展的解决方案吗?

在 Solr 中存储此类数据的理想方法应该是什么?


SQL DB 是否存在性能问题?查询数据库并获取 ID,然后将它们发送到 Solr 是完全可以的。您将避免复杂性和数据重复。无论如何,您还必须进行一些计算才能将这些 ID 发送到 Solr。

但要回答您的问题,是的,您确实可以将每个客户排除的产品 ID 存储在单独的索引中。您将使用多值字段并且使用原子更新进行更新 https://lucene.apache.org/solr/guide/6_6/updating-parts-of-documents.html。如果您这样做,请确保保持索引模式简单,不使用 ID 分析器(只需使用string类型没有任何分词器或过滤器)。

您不需要执行 Solr 连接查询。您只需查找每个客户的产品 ID(第一个查询)并将它们作为 CSV 进行处理,然后执行以下操作terms query以及从索引中检索到的产品 ID(第二个查询)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在运行时从 Solr 中过滤大量 id 列表 的相关文章

随机推荐