我有一个包含所有“数据”的 Oracle 数据库和一个 Solr 索引,所有这些数据都被索引。理想情况下,我希望能够运行这样的查询:
select * from data_table where id in ([solr query results for 'search string']);
但是,出现了一个关键问题:Oracle 不会允许“in”子句中的项目数组中的项目超过 1000 个(大交易,因为我发现的对象列表经常 > 1000,通常在 50- 200k 项)
我尝试使用“split”函数解决此问题,该函数将采用逗号分隔的字符串并将它们分解为数组项,但随后我使用 SQL(PL/SQL是 32k 个字符,但在某些情况下,对于 80,000+ 个结果来说,它仍然太有限了)
我还使用 WHERE IN (....) 遇到了性能问题,我被告知这会导致查询非常慢,即使引用的字段是索引字段?
我已经尝试为 1000 项限制(又名:id in (1...1000 or (id in (1001....2000) 或 id in (2001....3000) )) - 这有效,但速度很慢。
我在想我应该将 Solr 客户端 JAR 加载到 Oracle 中,并用 Java 编写一个 Oracle 函数,该函数将调用 solr 并将结果作为列表返回,这样我就可以执行以下操作:
select * from data_table where id in (select * from table(runSolrQuery('my query text')));
事实证明这非常困难,我什至不确定这是否可能。
我不能做的事情:
- 在 Solr 中存储完整数据(安全性 + 存储限制)
- 用户 Solr 作为分页和排序的控制器(这就是我从数据库中获取数据的原因)
因此,我必须设计一种混合方法,让 Solr 真正充当 Oracle 的全文搜索提供程序。帮助!有没有人遇到过这个?