solr - 减少索引后立即执行的查询的 SOLR 查询时间

标签 solr

我有一个 9 核的 SOLR。 其中一个核心拥有大约 1,000,000 个文档。 (~1GB 大小)

完成向该核心提交 100 个文档后,我对 SOLR 中所有其他核心的接下来 20 -40 次查询变得非常慢(3 到 8 秒)

我使用数据导入处理程序每​​ 10 分钟添加约 100 个文档,然后提交(不优化)索引。

  1. 有没有办法减少索引后立即执行的查询的查询时间?
  2. 考虑到所有其他核心执行查询的速度很慢,这可能是硬件问题,还是因为我有很多核心而出现问题。

我平均每秒对所有核心执行 20 个查询。 我将 Jetty 与 SOLR 结合使用 我有 mergeFactor = 10

<mergeFactor>10</mergeFactor>

我已经为缓存设置了自动预热计数

<filterCache
    class="solr.FastLRUCache"
    size="1048576"
    initialSize="131072"
    autowarmCount="943718"/>

<documentCache
  class="solr.FastLRUCache" cleanupThread="true"
  size="131072"
  initialSize="117965"
  autowarmCount="117965" />

对于 newSearcher 和 firstSearcher,我有 50 个查询来自动预热新搜索器。

<listener event="newSearcher" class="solr.QuerySenderListener">
  <arr name="queries">
    <str name="q">cake+boss</str><str name="facet">true</str><str name="facet.field">Category</str></lst>
     ...// 50 warm-up queries
  </arr>
</listener>
//the same for firstSearcher 

最佳答案

你正在预热。这是在提交后减少查询时间的唯一方法。您可能需要进行预热才能在缓存中获取正确的文档/查询/过滤器,但您已经在朝着正确的方向前进。

我的猜测是,由于提交而导致的索引翻转,再加上缓存预热,正在占用您所有的 CPU 和 IO。结果是您的其他核心无法获得足够的资源来快速响应。在提交期间,您的内存使用量将迅速飙升,因为在一段时间内 Solr 中有 2 个索引副本。根据您的内存使用情况,您甚至可能会进行交换,这会对查询时间造成极大的破坏。

在提交期间进行一些 CPU 和内存分析。确保你没有交换。查看 CPU 核心是否被固定。您很可能需要投入更多的硬件来解决这个问题,或者考虑将您的核心分散到不同的机器上,这样它们就不会受到影响。

关于solr - 减少索引后立即执行的查询的 SOLR 查询时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127745/

相关文章:

string - Solr:方面计数索引不能是字符串?

sql - SOLR DataImportHandler,如何将嵌套实体视为 JSON 数组

php - 在solr结果中隐藏路径(id)

apache - 在 Apache Solr 中设置默认搜索字段

apache - 安装 solr 和索引 mysql

solr - 如何在 Solr 5.3.0 中获取建议

hadoop - 如何集成Hadoop,SOLR和Impala?

pdf - Tika解析器: Exclude PDF Attachments

Django、Haystack、Solr、MongoDB 架构决策

c# - 消除工厂中的 IoC 容器耦合