自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 收藏
  • 关注

原创 lucene中的PackedInts源码解读(3)-PACKED格式

继续回到最开始的获得mutable的代码那里去public static Mutable getMutable(int valueCount, int bitsPerValue, PackedInts.Format format) { assert valueCount >= 0; switch (format) { case PACKED_SI...

2018-07-28 17:06:37 455

原创 lucene中的PackedInts源码解读(2)-Packed64SingleBlock

紧接上一篇文章,介绍一下Packed64SingleBlock.create方法。public static Packed64SingleBlock create(int valueCount, int bitsPerValue) { switch (bitsPerValue) {//这个方法里面会根据bitPerValue来查看使用哪一个类,我们看看前几个吧。 ...

2018-07-27 19:45:37 437 1

原创 lucene中的PackedInts源码解读-1

之前在看lucene4.x的源码的时候,老是遇见packedInts这个类,当时没有看懂,所以这个周一没事做又看了一下,茅塞顿开,看懂了,记个笔记,装一下B。如果读者认为我的博客中含有错误,请联系我,我的qq是1308567317,以免误人子弟。顺便说一下,我这里看的是lucene6.6.0的代码。之前阿帅写个关于博客是写PackedInts,不过他仅仅写了PackedInts的思路和...

2018-07-27 19:45:27 846

原创 solr中schema.xml中域的omitNorm属性

今天在测试一个solr的排序问题的时候,突然建立不了索引了,我用的分布式的solrCloud(4.7.2版本),报一个异常—— org.apache.solr.client.solrj.impl.CloudSolrServer$RouteException: ERROR: [doc=0] cannot set an index-time boost, unindexed or norms ar...

2017-04-23 13:13:35 1184

原创 solr中的dismax解析器

之前一直用dismax,但是一直没有看看他到底是怎么实现的,今天终于看了一遍源码,记个笔记,方便以后查阅。当我们使用defType=dismax的时候就会使用到DisMaxQParser这个类,他是一个QParser,用于根据用户的输入解析为一个Query类的实例。我们看看他的解析方法: @Override public Query parse() throws SyntaxE...

2017-04-22 16:07:57 473

原创 juc-ThreadPoolExecutor线程池总结

之前对线程池的理解很是主观,我的理解是在线程池初始化的时候就生成指定的数量的线程,然后将一些任务添加到一个阻塞队列中,然后多个线程同时从阻塞队列中取任务执行,当没有任务时线程阻塞,今天下午看了下大神的博客以及源码,发现我自己的理解有些偏颇,所以今天再总结一下。我们创建线程池时一般都是通过使用Executors.newXXX来创建,所以我们从这个方法入手,无论是创建Fixed还是cached...

2017-04-15 19:04:22 145

原创 juc - Semaphore源码解读

Semaphore,翻译叫做信号灯,是用来做资源访问限制的,他维持了一个准许指令的集合,如果当前没有可以指令的话,调用一次acquire就会将当前的线程阻塞,没调用一次release就会将当前线程持有的指令还回指令集合。他的内部实现跟CountDownLatch类似,也是直接使用的aqs,在创建的时候就会设定一个state标记,用来表示可以同时被使用准许指令的最大值,在某个线程调用acquir...

2017-04-15 14:48:43 134

原创 juc - CyclicBarrier源码解读

之前看了CountDownLatch,他的实现是使用了aqs,提前设置好state的值,如果state不是0的时候调用await就会阻塞当前线程,加入到aqs的队列中,调用countDown就会减小state的值,当state的值时0的时候就会释放锁,将队列中的所有的线程释放,开始运行。这个CountDownLatch可以用于不同种类的线程之间,比如我们在连zk的时候,因为zkClient内部...

2017-04-15 11:53:53 129

原创 juc - CountDownLatch源码解读

之前再学zk的时候,用到了这个CountDownLatch,他的作用是等其他的线程都执行完了某个操作之后再让当前的线程执行,在其他线程没有执行完之前当前线程要阻塞,这样就能实现线程之间的通信了。因为最近刚学习了ReentrantLock,所以趁着还对aqs算是熟悉就看了一下CountDownLatch的原理,记录一下。CountDownLatch有两个主要的方法,一个是await,用于在不...

2017-04-11 17:29:05 141

原创 juc - Condition源码解读

之前写过ReentrantLock的源码的博客,但是还有个重要的东西没有介绍——Condition,他的用法我就不介绍了(这种介绍性的博客我不喜欢写),我今天就写一下Condition的实现原理,还是从Conditon的常用方法入手。1、await():这个方法由当前获得锁的线程调用,意思是释放锁,挂起自己并且唤醒等待当前线程持有的锁的其他线程(在aqs的等待队列中的其他节点),类似于sy...

2017-04-10 19:29:11 155

原创 juc - ReentrantLock源码解读(二)

上一篇介绍了不公平的重入锁,那什么是公平,什么是不公平呢?仅仅通过第一篇博客可以回答这个问题的,但是往往我们会忽略掉这个问题,看一下公屏和不公平的差别在哪里能勾引起我们更多的思考,这样就能解释什么是公平、非公平了。(在继续看这篇博客之前,请一定要读一下http://suichangkele.iteye.com/blog/2368173 这个博客)。在ReentrantLock的构造方法中,...

2017-04-08 18:06:46 163

原创 juc - ReentrantLock源码解读(一)

ReentrantLock,翻译过来叫做重入锁,是实现线程安全的一个方式,和synchronized的作用类似,但是他的实现原理是什么呢,在查看了很多的博客之后,我决定自己写一篇,形成自己的理解。从ReentrantLock的方法一个一个的来吧。补充:博客中会不停的提到一个叫做标记的概念,是我自己给起的名字,就是AbstractQueuedSynchronizer的private vola...

2017-04-08 17:55:36 153

原创 solr中的同义词配置以及关键源码解读

由于工作中需要做同义词,今天看了看solr的实现以及源码,记个笔记。我看的solr的版本是5.5.3.在solr的schema.xml中(5.x的版本是managed-schema文件)已经有实例了,截图如下: <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"&g...

2017-03-28 18:31:07 419

原创 如何查看solr中cache的使用情况

之前在 这篇博客中 (http://suichangkele.iteye.com/blog/2365868)写到了关于solr所使用的cache的统计信息的获取,但是他只在更新SolrIndexSearcher的时候才会触发,那么如何能随时的查看cache的使用情况呢?倒着推:如果要查找缓存的使用,必须获得SolrCore,获得SolrCore太简单了,任何一个Request都可以获得Sorl...

2017-03-27 17:32:16 372

原创 solr中与SolrIndexSearcher相关的其他配置

前面的几篇博客已经介绍了solrIndexSearcher的cache,warm,listener,其实还有其他的很多的配置,这个博客就是将这些。先声明一下,我的solr是5.5.3.在solrCOnfig.xml中的<query></query>下的配置都是和SolrIndexSearcher相关的,上一个博客中的<listener>就是在<qu...

2017-03-26 17:48:35 337

原创 solr中的SolrEventListener以及cache统计信息的获得

先声明一下,我的solr的版本是5.5.3 上一篇博客中说了当更新SolrIndexSearcher的时候并不是仅仅调用预热,还有其他的操作,那么都是有什么呢,看一下SolrCore的getSearcher方法(参数最多的一个),如果if (newSearcher != currSearcher) ,即索引发生了变化(无论是commit还是softCommit都算是变化),不仅仅是调用...

2017-03-26 17:11:16 213

原创 solr的warm

先说明一下,我使用的是solr5.5.3 之前在一篇博客中FastLRUCache中有个重要的方法是warm,当时没有说什么意思,这篇博客就是介绍这个。 warm的意思就是热身,即当一个IndexSearcher因为提交要重新生成一个IndexSearcher的时候,要对新生成的searcher进行warm,我们看一下SolrCore这个类的getSearcher方法,在这个方...

2017-03-25 21:22:24 145

原创 solr的cache在SolrIndexSearcher中的使用

先说一下,我使用的sorl的版本是5.5.3 上一个博客说完了solr中的cache,只是介绍了他的实现原理以及配置,并没有发现程序是如何使用他的,这个博客就是说这个,SolrIndexSearcher中对cache的使用。先说一下SolrIndexSearcher,这个就是对lucene的indexSearcher的封装,然后再查询的时候先从缓存中查,如果没有再从lucene中查找,...

2017-03-25 20:47:46 236

原创 solr中的cache的实现原理

先说一下,我使用的版本是5.5.3 搭建过solr的人肯定对solrconf.xml不陌生,在<query></query>中有多个cache,比如filterCache、queryResultCache,documentCache。这个博客就是介绍这三个cache的意思、配置以及他们的使用。我们直接看代码,对于这三个cache的使用是在solrIndexS...

2017-03-25 19:42:29 257

原创 queryParser介绍以及自定义queryParser实现搜索提示

写这篇博客第一个是为了记录在solr中自定义queryParser(顺便介绍一下solr的queryParser),第二个是在 http://suichangkele.iteye.com/blog/2363599 (自定义得分的PrefixQuery)这篇博客中也说了要在solr中使用自己的query要使用自己的queryParser,第三个是公司业务需求,需要实现更加智能的搜索提示(智能是我...

2017-03-25 18:32:09 476

原创 solr、lucene的效率分析的一个文章

链接:https://wiki.apache.org/solr/SolrPerformanceProblems?主要讲了:gc、commit、内存大小(包括java、os),cache(涉及到warm)对性能的影响,讲的很好。  

2017-03-24 17:18:07 188

原创 solr分布式请求的判断——HttpShardHandler

在solrCloud中,我们发起的一次查询请求绝大部分是朝多个shard发起的请求,但是可能存在这么一个情况,我已经知道这次要查询的sahrd是哪一个了,那么如何只向一个shard发起请求呢?这个博客就是看看solrCloud对分布式请求的判断,代码在HttpShardHandler中,看看checkDistributed方法: /** * 判断这次请求是不是分布式的请求,根据是...

2017-03-17 10:13:57 228

原创 实现得分的PrefixQuery

(先声明一下,我使用的lucene的版本是lucene4.7.2)在lucene中,有一种类型的query叫做MultiTermQuery,故名思议,他是要涉及到很多个term的query,比如我们常用的WildcardQuery、FuzzyQuery、PrefixQuery、TermRangeQuery、NumericRangeQuery等,他们都是需要按照一个或者多个term按照一定的...

2017-03-16 19:38:16 434

原创 solrCloud中的路由策略:DocRouter、CompositeIdRouter、ImplicitDocRouter

sorlCloud是分片的,那么如何决定一个document应该到哪一个分片呢?负责解决这个问题的东西就是DocRouter,翻译过来是doc路由器。在创建一个集合(collection)的时候,我们必须要给集合置顶一个docRouter,solr中默认是使用基于hash策略的docRouter(CompositeIdRouter),当然还有其他的Router,这个博客就要说这些。我们先看...

2017-03-15 17:13:48 996

原创 solrCloud中的分布式请求响应超时解决方案

    之前一篇博客中写道solrCloud对查询的请求是在服务端进行的组装,是对所有的shard的所有的replica进行的轮训的。这两天看了下在服务端solr是如何进行操作的,这里涉及到的代码超级多,我就只贴一部分,用来说明大意即可。    在将查询请求发往到某个replica之后,先根据path找到某个requestHandler(我们这里用select举例),然后再用这个reque...

2017-03-14 17:41:43 1515

原创 httpClient中的timeout的配置

近日在用solrCloud的时候出现了一些状况,在进行查询的时候,由于某些节点的响应速度过慢导致整个请求响应的很慢,我们的解决办法是设置超时时间,也就是如果某些shard的响应太慢,则干脆忽略他的响应。这要涉及到配置httpClient的多个timeout,于是重新学习了一下HttpClient的三个配置,从源码中得到解释,然后做了个例子验证了源码的解释(我使用的httppClient的版本是4...

2017-03-14 09:01:25 800

原创 solr中对于关键字置顶(竞价排名)、拉黑的源码实现已经实例讲解(二)

继续看他的源码,在上一篇博客中还有几个方法没有看,第一个是getElevationMap,如果在请求中没有指定elevateIds或者没有指定excludeIds的话,则调用这个方法  /** get the elevation map from the data dir <br/> 从data中读取配置文件。 */ Map<String,ElevationOb...

2017-03-10 13:42:05 335

原创 solr中对于关键字置顶(竞价排名)、拉黑的源码实现已经实例讲解(一)

 工作中用到了关键词置顶、拉黑的操作,自己毫无办法,考虑了很久打算用payload,但是又来在一个研究lucene源码的群中某个小伙伴给我提示说solr中已经为我们实现了这个功能,顿时大喜,马上百度了一下,然后内心很激动,solr真的太好用了,都为我们考虑到了。不过这远远不够,还有更多的事情需要做,不明白他的实现原理,只能猜,一遍一遍的试错,成本太高,所以还是拿来源码看吧。(对于没有对so...

2017-03-10 12:43:22 681

原创 solrCloud中CompsiteId路由策略的collection的操作分析

       solrCloud有多个shard,一个shard有一个或者多个replica,那么再solrj发起添加documnet(这里称作update请求)或者是查询(这里叫做query请求)的时候,是如何向最终的各个solr的不同的shard的replica发送的请求呢?我看了看solrj中的CloudSolrServer的处理请求的源码以及solr服务端的部分源码,终于弄懂了,几个笔...

2017-03-06 13:39:55 344

原创 solr中对于分词结果的获得即分析

在使用solr的时候,在管理页面的analysis中可以发现有对词的分析的展示,在solrj中同样提供了方法获得,记个笔记,方便以后再用的着。使用solrj获得分词结果要使用FieldAnalysisRequest类。     solrj提供的接口的逻辑和管理页面的逻辑一样,先是区分建立索引和查询两种情况(比如ik的使用时就是在建立索引的时候不适用智能分词,而在查询时启用智能分词)...

2017-03-01 20:29:33 776

原创 关于jvm监控配置的笔记

1、我想记录gc的历史,方便以后的分析在启动jvm的时候添加如下: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:D:/gc.log -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10K -XX:+UseGCLogFileRotation    ...

2017-01-16 16:26:33 88

原创 solrCloud搭建笔记(更好一点)

之前已经写了一篇solrCloud的搭建笔记了,最近又发现一种更好的方法,在记录一边,我使用的zk的版本是3.4.6,使用的solr的版本是5.5.3,请在apache的官网现在solr此版本的安装包,另外我使用的tomcat是8.x的版本,8之下的会报一个错。1、搭建zk环境,我的zk的url是ip:2181,为了不和其他的配置混乱,我在zk中单独建立了一个节点,来存放solr的信息,s...

2017-01-13 16:49:10 113

原创 minor GC,major GC,full GC

看这篇博客  http://www.open-open.com/lib/view/open1429883238291.html

2017-01-12 14:41:39 74

原创 java虚拟机的的运行模式

java虚拟机有两种模式,一个中server模式,即当做服务器来使用,一个是client模式,用在图形界面中。这个博客写的好:http://www.cnblogs.com/love-jishu/p/4402156.html...

2017-01-12 14:31:38 266

原创 lucene3.0.3中的数字索引以及数字范围查询

      我看了3个下午,加上一个上午终于看懂了lucene对于数字的索引和对于数字范围的检索,主要的时间都是花在了NumericRangeQuery上,尽管一次一次的失败但是我并没有放弃的打算,研究与探索本来就是我的一大兴趣,最后的喜悦要比之前所有的痛苦都要来的爽!谢谢笔记,方便可能正在迷茫的你。备注:如果你对lucene的索引格式不熟悉尤其刚接触lucene的话,请绕行,这片笔记只适合对...

2017-01-09 15:40:28 519

原创 lucene3.0.3中的SpanNearQuery(一)

SpanNearQuery和PhraseQuery是差不多的意思,都是表示多个term必须全部存在且距离满足一定的条件的query,但是SpanTermQuery的用法更多,比如他有一个inorder的参数,可以控制多个term出现的位置是不是要符合指定的顺序(phraseQuery就是可以不按照出现的顺序的)构建一个SpanNearQuery需要三个参数,一个是多个SpanQuery,一...

2016-12-30 18:19:48 728

原创 lucene3.0.3中的SpanFirstQuery

SpanFirstQuery是一个很简单的SpanQuery,在根据spans进行召回doc的时候,他会判断当前出现的位置是否满足一定的条件——出现的是不是在指定的end之前,如果是的话说明当前的位置是符合要求的,否则会继续读取下一个位置。我们看一下他的getSpans方法@Overridepublic Spans getSpans(final IndexReader reader) ...

2016-12-30 11:15:14 142

原创 lucene3.0.3中的PayloadTermQuery、PayloadFunction

上一篇写了SpanTermQuery,他没有任何意思,但是他有个子类,叫做PayloadTermQuery,这个类倒是可以实现一些功能。他也是根据term进行召回,但是对于得分的计算可以加入payload的信息,这样可以使得某个term和某个doc产生单独的关系,比如我们在电商搜索中,对于某个商品想做推广,使得他在搜索a词的时候得分特别大,但是其他的搜索的得分不会变大,显然使用boost是不正...

2016-12-30 10:34:48 206

原创 lucene3.0.3中的Spanquery和Spans介绍

      SpanQuery就是用来查询不仅仅是含有term,并且存在的各个term的位置符合一定条件的doc,从源码上讲他最大的改变就是有了getSpans(IndexReader reader)方法,该方法返回的是Spans,在SpanQuery中使用Spans这个类来召回doc(在普通的termQuery中是使用termDocs进行召回),我们先看看Spans这个类。      在...

2016-12-29 17:39:37 491

原创 lucene3.0.3中的CustomerScoreQuery

      我原本以为我已经把lucene3.0.3看的很详细了,结果发现漏了一个很重要的query——CustomerScoreQuery,从名字上看表示用户自定义得分的query,我表示很好奇,因为我花了好大力气才明白了lucene的得分公式,貌似这里竟然可以自己写得分公式了,于是我抱着极大的好奇心看了他的源码,记录在此,方便大家。     CustomerScoreQuery的原理是...

2016-12-27 13:54:42 132

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除