如何提高Solr性能?

Man*_*ojP 4 java mysql lucene performance solr

我们如何使用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,但没有运气.数据日益增加,这导致了很多问题.它适用于小型项目或小型属性,但每当我们尝试获取更多属性时,它会花费太多时间,有时它会崩溃.

我不确定我们是否正确使用索引?

谁能建议更好/替代方法?提前致谢.

jay*_*jay 5

您可以只返回每个文档的"id",然后从MySQL获取这些文档作为永久存储,而不是为每个文档返回400个字段.

因此,对于该示例,如果每个搜索返回25个文档ID,则在您的应用程序中,您可以从MySQL获取25个文档(可以进行并行调用)

根据我的经验,返回更多的字段会增加qTime.