【问题标题】:How to improve Solr performance?如何提高 Solr 性能?
【发布时间】:2015-07-09 06:33:24
【问题描述】:

我们如何使用 Solr: 我们在 solr 中存储 7K 文档,其中 3k 属性附加到一个文档。每个属性都在 solr 上建立索引,以启用对这些属性的搜索/排序。我们根据搜索/过滤条件从 solr 获取数据,其中一个文档附加了 400 多个属性。因此,当我们尝试在 solr 中搜索具有 1 个属性的文本时(通过设置 fl="projectId"),在 solr 控制台上显示结果几乎不需要 1 秒,这很好。

但是,如果我们尝试为相同的搜索条件获取 100+ 个属性(这将返回字符串 ~100*3* no of match document(~50) out of 7K document with 4K attribute)大约需要 20 秒。但是我们需要用匹配的文档获取 400 多个属性,这需要很长时间 ~ 90 秒,早些时候它由于 outOfMemoryError 而崩溃,我们通过增加 RAM 大小和 JVM 堆大小来修复它。

Mysql 数据与 Solr 同步: 目前我们使用 MySql DB 作为主数据库,Solr Server 作为辅助数据库。我们过去每天都会将 mysql 数据与 Solr 服务器同步。每当我们更新 Mysql DB 上的任何属性时,我们也会更新 solr 服务器。

在应用程序中使用 solr 结果数据: 应用程序仪表板将包含用户预先配置的列(属性)的文档。用户可以应用搜索/过滤条件在他的仪表板上填充所需的结果。因此,我们的应用程序尝试通过访问 solr 服务器来获取具有搜索/过滤条件的数据。

我们已经尝试了很多方法,例如增加堆大小、RAM 大小和 CPU 的数量,但没有运气。数据每天都在增加,这导致了很多问题。 它适用于少量项目或少量属性,但每当我们尝试获取更多属性时,它会花费太多时间,有时它会崩溃。

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

任何人都可以提出更好/替代的方法吗? 提前致谢。

【问题讨论】:

  • 我们实际上谈论了多少数据附加到每个文档?如果每个文档的大小为 MB,则在检索文档列表时必须传输大量数据。
  • 每个文档包含 ~1MB
  • 您要返回多少文件?您是否评估过将文档的序列化版本保存在缓存中并返回,而不是从 Solr 或 MySQL 获取实际数据?
  • @MatsLindh 目前我们正在从 solr 返回实际的搜索结果。我们有 3K 的 2950 个动态字段,并通过 java 代码通过分批提交 SolrInputDocumentList 进行索引,没有定义类别,所有文档都在同一级别。我正在考虑将组织 ID 添加为类别并将相关文档放在该类别下。它有助于提高我的搜索性能吗?

标签: java mysql performance solr lucene


【解决方案1】:

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

例如,如果您每次搜索返回 25 个文档 ID,则在您的应用程序中,您可以从 MySQL 获取 25 个文档(可能是并行调用)

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

【讨论】:

  • 是的,我也是这么想的,同样,从 mysql 获取数据也需要很长时间
  • @ManojP Solr 可以快速找到符合您条件的数据。一旦你知道每个 id 匹配你的条件,MySql 将立即回答,因为你唯一的条件是在索引列上(即 id)。然后,由于所有经过优化的预制功能,从数据库中获取数据会更快。解析 Solr 响应将花费更多时间,因为您将需要使用 XML 解析器或其他任何东西,这要慢得多。
  • @ManojP 这里的问题是您从 solr 返回了太多数据。应用过滤器/构面不会有帮助。在你的问题中,你提到如果你保持 &fl=projectid 它需要不到 1 秒。如果您认为 MySQL 也将花费大量时间,那么下一个最佳选择是查看像 Memcached 这样的缓存数据库。当您将数据插入 MySQL/solr 时,也将相同的数据插入 memcached。从 solr 获取 projectids 后,从 memcached 获取文档。
  • 感谢您的时间和信息,我们已通过添加 MongoDB 来填充数据(从 solr 获取 id 后)解决了这个问题。
【解决方案2】:

您可以尝试使用构面搜索 - 多次搜索,以减少每次连续搜索的候选者数量。

另一种方法是广泛使用过滤器。

如果您可以将一些查询转换为过滤器 (fq),这可能会提高性能。

【讨论】:

  • 好的,我会尝试将我的搜索/过滤条件添加到 fq,我不确定构面搜索?
猜你喜欢
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2021-06-13
  • 2020-09-09
相关资源
最近更新 更多