`
suichangkele
  • 浏览: 198137 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
      我看了3个下午,加上一个上午终于看懂了lucene对于数字的索引和对于数字范围的检索,主要的时间都是花在了NumericRangeQuery上,尽管一次一次的失败但是我并没有放弃的打算,研究与探索本来就是我的一大兴趣,最后的喜悦要比之前所有的痛苦都要来的爽!谢谢笔记,方便可能正在迷茫的你。备注:如果你对lucene的索引格式不熟悉尤其刚接触lucene的话,请绕行,这片笔记只适合对源码有深入研究的程序员。       对于数字的索引并不是直接将数字变为字符串,因为这样的话没法进行范围搜索,比如我们索引1、5、20、56、89、200、201、202、203...299、500, ...
SpanNearQuery和PhraseQuery是差不多的意思,都是表示多个term必须全部存在且距离满足一定的条件的query,但是SpanTermQuery的用法更多,比如他有一个inorder的参数,可以控制多个term出现的位置是不是要符合指定的顺序(phraseQuery就是可以不按照出现的顺序的) 构建一个SpanNearQuery需要三个参数,一个是多个SpanQuery,一个是多个spanQuery之间最大的距离slop,第三个是是否要求多个term出现的位置和传入参数的顺序相同,他的构造方法为: public SpanNearQuery(SpanQuery[] cla ...
SpanFirstQuery是一个很简单的SpanQuery,在根据spans进行召回doc的时候,他会判断当前出现的位置是否满足一定的条件——出现的是不是在指定的end之前,如果是的话说明当前的位置是符合要求的,否则会继续读取下一个位置。我们看一下他的getSpans方法 @Override public Spans getSpans(final IndexReader reader) throws IOException { return new Spans() { private Spans spans = match.getSpans(reader);//获得封 ...
上一篇写了SpanTermQuery,他没有任何意思,但是他有个子类,叫做PayloadTermQuery,这个类倒是可以实现一些功能。他也是根据term进行召回,但是对于得分的计算可以加入payload的信息,这样可以使得某个term和某个doc产生单独的关系,比如我们在电商搜索中,对于某个商品想做推广,使得他在搜索a词的时候得分特别大,但是其他的搜索的得分不会变大,显然使用boost是不正确的,因为他会使得所有的词的搜索得分都会变大。这个时候就可以使用payload了,这个类和SpanTermQuery的不同之处在于得分上,我们看一下这个类的得分的实现,在PayloadTermQuery ...
      SpanQuery就是用来查询不仅仅是含有term,并且存在的各个term的位置符合一定条件的doc,从源码上讲他最大的改变就是有了getSpans(IndexReader reader)方法,该方法返回的是Spans,在SpanQuery中使用Spans这个类来召回doc(在普通的termQuery中是使用termDocs进行召回),我们先看看Spans这个类。       在Spans的javadoc中有这样的说明:Spans用于枚举term出现的位置,如果是在一个document中则枚举在当前的doc中出现的各个位置,枚举完了当前的doc的所有的位置,则会读取下一个doc ...
      我原本以为我已经把lucene3.0.3看的很详细了,结果发现漏了一个很重要的query——CustomerScoreQuery,从名字上看表示用户自定义得分的query,我表示很好奇,因为我花了好大力气才明白了lucene的得分公式,貌似这里竟然可以自己写得分公式了,于是我抱着极大的好奇心看了他的源码,记录在此,方便大家。      CustomerScoreQuery的原理是这样的,它包含一个主query以及一个或者多个valueScourceQuery,主query和我们平时的query是一样的,可以是任意的query的子类,valueSourceQuery是用来完成我们 ...
      FieldCache是lucene中的一个隐藏的很深的东西,在api中不可见,我也是在看排序的源码中才看到这个类的,今天我又看了个CustomScoreQuery,它里面也是用了FieldCache,所以我觉得这个类还是比较重要的,有必有把这个类记录一 ...
       solr中的dismax我在lucene中一直没有找到对应的queryParser,但是我倒是找到了一个Query——DisjunctionMaxQuery,他的原理和disMax的原理是一样的。我仔细想了想,solr中的dismax这个queryParser的最终也是形成了一个类似的query,当然其实现可能不同,大致原理应该一样。所以我看了看lucene 3.0.3中的DisjunctionMaxQuery类的源码,再此记录一下笔记,方便我,也方便你。         DisjunctionMaxQuery,以下简称dmq,和booleanQuery的原理是差不多的,他也 ...
把搭建solrCloud的笔记写在这,方便我,也能方便你。 我是在windows上搭建的,但是zk是linux上。我一共使用了三个solrCloud的server,共两个shard,每个server都部署在一个单独的tomcat上。我本地的host是:172.16.140.55,我的linux的host是172 ...
上一篇博客刚刚写了类加载器的东西,这里马上就用到了,使用类加载器来加载某个包下面的类,比如我们的代码时com.xxx.yyy,那么我想在容器启动的时候加载包下面的某些类来做些一些启动前的检查,就需要我们使用类加载器来加载类了。 我想到这个的原因有两个:一个是spring的路径扫描,即spring会扫面某个路径下面的bean,然后放入spring的ioc容器,这个一直以来都困惑着我,她是如何做到的呢?第二个是log4j2中的插件,比如我们在log4j中配置的很多appender:File,Console,RollingFile,Root,Info等,他的官方的解释是这些都对应着插件,那么log ...
我一直没有掌握java的类加载器,直到最近我看log4j2的源码时又好好研究了一下,才稍微懂点。在log4j2中有个功能是收集某个包下面的所有的类,以及写在某个文件中的类,这些都是需要classloader来完成的,于是顺着他的思路以 ...
solr中有个概念叫做localParams,翻译过来叫做局部变量,用来添加局部信息到某个变量的,比如假设我们要传递给solr查询的值为hello world,但是在查询hello的时候指定使用的queryParser或者是其他属性,则可以使用局部变量:q={!q.op=AND df=title}hello world,这个表示当查询hello world时,使用的op是AND,默认查询title域。   1、 localParams的语法: 必须使用大括号括住localParams,并且大括号里面必须以!开头,大括号里面可以包含多个key=value,多个之间使用空格隔开,所以如果原先 ...
在开发中经常用apache的开源项目,比如solr,activemq,kafka,hadoop,如何获得他的资源呢,包括成熟的项目和源码,很简单,写在这里防止以后忘记了。 http://archive.apache.org/dist/,进入到这个链接之后,就会显示apache的所有的项目,有些项目是在下一个级别里面,比如solr就在lucene里面,然后点进去,就可以下载项目和源码了。 之所以到这个路径下面是因为这个路径下面保存了所有的版本,在http://apache.org/index.html#projects-list路径中也有所有的项目,但是这里面的连接只包含了最新的几个版本的 ...

shiro学习00-前言

shiro是apache的一个安全架构,用来管理web应用的安全,虽然在开发中用到过,但是一直没有时间认真的从头到尾有条理的学习一下,趁现在有空,我又学习了一遍,并将笔记记录下来。 我用的shiro的版本是1.2.2,官方的文档的位置是http://shiro.apache.org,建议大家先看一下官方文档,或者是读一下网上其他人写的shiro的博客,对shiro是什么优点印象。我重点讲源码,将shiro的使用穿插进去。如果读者对shiro如何使用不熟悉的话先要看看别人的博客。  
网站的用户在shiro中用subject表示,使用的默认类是WebDelegatingSubject,是DelegatingSubject的子类,这个WebDelegatingSubject里面含有很多很多的参数: ·PrincipalCollection:主键(或者标记的集合), ·authenticated:是否校验过, ·Host:登录的ip ·session:当前的session(经过
Global site tag (gtag.js) - Google Analytics