文档章节

solrj的CloudSolrClient源码分析及为什么查询慢

将将将
 将将将
发布于 2016/07/11 17:31
字数 400
阅读 543
收藏 0

solrj针对solrcloud提供了CloudSolrClient,用于对集群环境solr操作,从一个测试例子,一步步深入,看看CloudSolrClient是如何做查询操作的

1、使用CloudSolrClient发起一个查询请求

2、接着调用CloudSolrClient的request方法

 

 

3、CloudSolrClient的request方法中,首先回去获取请求中的collection名字,如果没有,获取默认设置的collcetion,然后调用requestWithRetryOnStaleState方法

4、requestWithRetryOnStaleState方法中,先去连接zk获取solrclound注册在zk上的信息

5、获取zk上的信息,经过处理后,封装到request中,调用sendRequest方法

6、在sendRequest中,会获取每个片的每个replicat的url与注册在zk上的live url做一个交集,得到一个查询url集合,然后创建一个LBHttpSolrClient,请求solrcloud

 

 

7、LBHttpSolrClient的request中会在for循环中挨个的轮询上一个步骤中放入的urllist发起http查询请求

 

在rsp合并结果,并返回

 

问题

在LBHttpSolrClient的request中,http请求是串行化的,也就说,一次查询,需要串行的发起n个http请求,太耗费时间

建议


LBHttpSolrClient的request中对多个url发起请求,可以考虑并行化的http请求

在CloudSolrClient中保持对zk的长连接watch不断

也可以从业务入手,采取手动路由的方式,即”知道自己要的数据在那个分片上“,直接对该分片发起http查询请求,这样会减少http请求个数

© 著作权归作者所有

共有 人打赏支持
将将将
粉丝 23
博文 30
码字总数 13288
作品 0
深圳
程序员
私信 提问
加载中

评论(2)

Volong
Volong
那个循环不是用来保证请求一定成功的吗?如果在发送请求的时候报了异常,才会进行下一次循环的吧。
ITFrank
ITFrank
你的意思是在建collection时指定router.name=implicit ?这样就能把想要的索引分配到自己相应的shard中去?
Solr 按日期facet 差8小时问题解决

项目中使用solrj来操作solr,日期solr会自动转换: 1.solrj在提交到solr时,时间会因为时区问题减少八小时 2.solr接收到时间后,存为底层lucene索引时时间类型为long型,是正确的时区时间,但...

zachary124
2014/06/24
0
4
solr6.6初探之solrj

一. solrj简介:   solrj可以使Java应用程序很方便的访问与操作solr。solrj有几个核心类,分别为:1.SolrClient 2.SolrRequests 3.SolrQuerys 4.SolrReponses   tips:该jar包可以在${solr....

java~nick
2017/10/24
0
0
Solr JAVA客户端SolrJ 4.9使用示例教程

简介 SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对Solr提供了Rest 的HTTP接口进行了封装,SolrJ底层是通过使用httpClient中的方法来完成Sol...

cloud-coder
2014/08/21
0
0
Solr初探(6)——SolrCloud

Solr集群,即是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 。 当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高...

yuanlaijike
2018/04/12
0
0
Solr环境搭建及IK分词的集成及solrJ的调用(三)【完结】

前两篇的连接到这里: Solr环境搭建及IK分词的集成及solrJ的调用(一) http://my.oschina.net/zimingforever/blog/120732 Solr环境搭建及IK分词的集成及solrJ的调用(二) http://my.oschina.n...

王小明123
2013/04/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部