gpt4 book ai didi

elasticsearch - 如何在运行时从Solr过滤大量ID

转载 作者:行者123 更新时间:2023-12-03 00:54:37 24 4
gpt4 key购买 nike

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

与我们使用https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html在Elasticsearch中可以执行的操作非常相似

我可以考虑在Solr中进行操作的可能方式:

  • 在产品索引本身中保留一个客户列表,并对此进行过滤。但是,如果我必须为所有文档重新编制索引,这确实会很痛苦。列表也可能很大。
  • 我想到的另一种方法是维护一个单独的核心,该核心用于为每个客户保留文档,并排除product_id,并使用{!join}执行联接以为客户过滤产品。它是可扩展的解决方案。

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

    最佳答案

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

    但是要回答您的问题,是的,您可以将每个客户排除的产品ID确实存储在单独的索引中。您将使用多值字段和update using atomic updates。如果这样做,请确保没有使用用于ID的分析器来简化索引架构(只需使用string类型,而无需任何标记器或过滤器)。

    您不需要执行Solr连接查询。您只需要查找每个客户的产品ID(第一个查询)并将它们作为CSV进行按摩,并使用从索引中检索到的产品ID进行terms query(第二个查询)。

    关于elasticsearch - 如何在运行时从Solr过滤大量ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487646/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com