gpt4 book ai didi

c# - 如何将一个非常大的 lucene 结果集连接到一个真正的大型 sql 表 [10 万行]

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:59 24 4
gpt4 key购买 nike

问题来了

我有一个 SQL 数据库,其中包含您的常规客户、产品、订单模式,但非常庞大。 [每个表有 10 万行]。还有一个带有 order_email [大约 1 亿行] 的大表。此表包含与订单关联的所有电子邮件通信。我在 order_email 之上实现了全文搜索,效果很好。

现在我想扩展电子邮件搜索功能以根据其他域对象进行过滤。即回答像

这样的查询
  • 显示发送了包含“永远不会放弃你”这一短语的电子邮件的客户
  • 显示具有关联电子邮件的订单,其中包含短语“more ponies”。

实现是对 lucene 结果和 sql 结果进行交集/连接,但由于所涉及的表和索引的大小,我想不出一种不会遇到问题的方法

我失败的方法

  • 蛮力。将我的大部分数据库列添加为 lucene 字段。这相当于对我的整个数据库进行反规范化,并创建一个 Lucene 索引(大小以 TB 为单位),所有列都作为字段。性能糟糕且成本高昂。

  • 获取 Lucene 结果集,从中获取 OrderID 并查询数据库,如 SELECT * from Order where OrderID IN(ORDERIDs from Lucene)。这行不通,因为电子邮件搜索可能会产生一百万个订单 ID,这会导致 SQL 查询的性能很差。

  • 在应用程序代码中进行连接,但遍历 sql 结果和 lucene 结果。这意味着根据结果的大小,单个查询可以加载 2 个数百万行的数据集并对其进行迭代,从而浪费 CPU 和内存。

关于如何构造 2 个大型数据集的连接/交集的想法?

p.s:第一个认为 hadoop 是烂鸡蛋的人。我希望可以,但我们没有购买更多硬件的预算。

最佳答案

就像 OzrenTkalcecKrznaric 在问题的评论中所说的那样,寻呼是您的 friend 。 (请记住,有史以来最强大的算法是“分而治之”。)

关于c# - 如何将一个非常大的 lucene 结果集连接到一个真正的大型 sql 表 [10 万行],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17840617/

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