我们如何使用Solr: 我们正在存储7K文档,其中3k属性附加到solr中的一个文档。每个属性都在solr上编制索引,以便对这些属性进行搜索/排序。我们根据搜索/过滤条件从solr获取数据,其中400+属性附加到一个文档。因此,当我们尝试在solr中搜索一些带有1个属性的文本时(通过设置fl =" projectId"),在solr控制台上显示结果几乎不需要1秒就可以了。
但是,如果我们尝试获取相同搜索条件的100+属性(将返回带有4K属性的7K文档中匹配文档(~50)的字符串~100 * 3 * no),则需要约20秒。但是我们需要使用匹配文档获取400+属性需要很长时间~90秒,之前由于outOfMemoryError而崩溃,我们通过增加RAM大小和JVM堆大小来解决这个问题。
与Solr的Mysql数据同步: 目前我们使用MySql DB作为主数据库,Solr Server作为辅助数据库。我们曾经每天与Solr服务器同步mysql数据。每当我们更新Mysql DB上的任何属性时,我们也会更新solr服务器。
在应用程序中使用solr结果数据: 应用程序仪表板将包含用户预先配置的列(属性)的文档。用户可以应用搜索/过滤条件在其仪表板上填充所需的结果。因此,我们的应用程序尝试通过访问它来从solr服务器获取具有搜索/过滤条件的数据。
我们已经尝试了很多东西,比如增加堆大小,RAM大小和没有CPU,但没有运气。数据日益增加,这导致了很多问题。 它适用于少量项目或少量属性,但每当我们尝试获取更多属性时,它会花费太多时间,有时它会崩溃。
我不确定我们是否正确使用索引?
有人可以建议更好/替代方法吗? 提前谢谢。
答案 0 :(得分:5)
不是为每个文档返回400个字段,而是可以返回" id"每个文档然后从MySQL获取这些文件,这是您的永久存储。
因此,对于该示例,如果每次搜索返回25个文档ID,则在您的应用程序中,您可以从MySQL获取25个文档(可以进行并行调用)
根据我的经验,返回更多的字段会增加qTime。
答案 1 :(得分:1)
您可以尝试使用构面搜索 - 多次搜索,以减少每次连续搜索的候选项数量。
另一种方法是广泛使用过滤器。
如果你可以将一些查询转换为过滤器(fq),这可能会提高一个好因素的性能。