我一直在使用Lucene来提供一个解决方案,我的用户可以非常快速地查询大量记录(1亿+)。用户拥有大型表单,可以选择许多不同的字段。他们还有一个“高级搜索”选项,他们可以构建自己的查询,支持使用AND,OR和NOT运算符的嵌套逻辑。
我使用MSSQL作为主数据存储,然后在Lucene中索引数据。 Lucene查询返回一个ID列表,然后我直接从MSSQL数据库中查询,从而避免了直接针对数据库尝试等效查询的复杂(慢)查询计划。通过一些规划和设计,Lucene已经证明自己非常有能力执行非常快速的查询,其中查询具有很大的复杂性,例如: ((A AND B) OR (B AND C AND D)) OR (A[X TO Y] AND K) OR (Q,W,E,R,T,Y,U,I,O)
。你得到了照片。
我遇到的问题是关系问题。当记录具有相关属性K
时,每个属性都有自己的属性J
,并且用户尝试执行搜索,指定J对单个K的多个条件,并且多个条件是数字本质上,突然间对关系存储的需求变得明显,因为没有真正有效的方法来标记一个数字属性与另一个数字属性之间的关系。
显然,有一些很好的解决方案可用于存储大量数据,并且在基本级别上仍然可以快速查询。我想知道的是,如果您有任何建议,当查询通常具有一定程度的复杂性时,这些解决方案中的哪些也能够执行非常快速的查找。
答案 0 :(得分:0)
我可以说,对此没有真正好的统一解决方案。我的解决方案是:
在我的索引中,我存储了文档ID,然后根据需要从数据库中检索。