大批量的Solr并发查询

时间:2017-05-19 06:58:12

标签: java apache-spark solr jetty threadpool

我正在使用Solr 6.3.0和java CloudSolrClient,它接受zookeeper url。

我有一个5节点的Solr云集群,每个节点有2个分片和1个副本,即总共20个分片

我需要通过查询Solr定期更新一些数据,我每天必须运行大约300万次查询,

我的查询如下:

获取唯一ID:

  1. 获取字段值的termfreq(),使用max tf获取最高值(2或3)

  2. 触发查询其他ID最少的距离b / w该字段中的特定值按其排序以获得相似的ID。

  3. 例如:

    fq将如下:

    (field_name:value_1 OR field_name:value_2 OR field_name:value_3 OR field_name:value_4 OR field_name:value_5)"
    

    将param排序为:

      {!func}dist(4,termfreq('field_name','value_0'),termfreq('field_name','value_1'),termfreq('field_name','value_2'),termfreq('field_name','value_3'),termfreq('field_name','value_4'),5,4,6,3,2) asc"
    

    此处5,4,6,3,2从第1次查询为value_1,value_2获得5的最高tf。

    1需要几毫秒 2第一次需要120ms

    我需要从第二个查询获得1000行,每300万

    任何调整都可以帮助我减少这个?

    我尝试过Threadpool,平均时间为1次查询150ms 尝试使用带有10个exec的spark,但奇怪的是它比线程池花了更多的时间。

    我监控了所有5个节点,所有这些节点的CPU使用率非常高(查询时),但是内存消耗很低(30 GB中最大9GB),我将堆设置为 - Xms是8GB,Xmx是15GB。

    过滤器缓存为512mb(初始)-2GB(大小)。

    我已经尝试了很多调整,仍然无法减少查询次数,我无法并行化这部分代码。

    感谢。

0 个答案:

没有答案