一.总论 根据http://lucene.apache.org/java/docs/index.html 定义: Lucene 是一个高效的,基于Java 的全文检索库. 所以在了解Lucene之前要费一番工夫了解一下全文检索. 那么什么叫做全文检索呢?这要从我们生活中的数据说起. 我们生活中的数据总体分为两种:结构化数据 和非结构化数据 . 结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据: 指不定长或无固定格式的数据,如邮件,word文档等. 当然有的地方还会…
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene的打分公式非常复杂,如下: 在推导之前,先逐个介绍每部分的意义: t:Term,这里的Term是指包含域信息的Term,也即title:hello和content:hello是不同的Term coord(q,d):一次搜索可能包含多个搜索词,而一篇文档中也可能包含多个搜索词,此项表示,当一篇文档中包…
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程. Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程. 本文详细解读了Apache Lucene - Index File Formats(http://lucene.apache.or…
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后的文章中进行分析. Lucene的索引过程,很多的博客,文章都有介绍,推荐大家上网搜一篇文章:<Annotated Lucene>,好像中文名称叫<Lucene源码剖析>是很不错的. 想要真正了解Lucene索引文件过程,最好的办法是跟进代码调试,对着文章看代码,这样不但能够最详细准确…
Lucene总的来说是: 一个高效的,可扩展的,全文检索库. 全部用Java实现,无须配置. 仅支持纯文本文件的索引(Indexing)和搜索(Search). 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程. 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点. 让我们更细一些看Lucene的各组件: 被索引的文档用Document对象 表示. IndexWriter 通过函数a…
一.段合并过程总论 IndexWriter中与段合并有关的成员变量有: HashSet<SegmentInfo> mergingSegments = new HashSet<SegmentInfo>(); //保存正在合并的段,以防止合并期间再次选中被合并. MergePolicy mergePolicy = new LogByteSizeMergePolicy(this);//合并策略,也即选取哪些段来进行合并. MergeScheduler mergeScheduler = n…
android组件之间的通信有多种实现方式,Broadcast就是其中一种.在activity和fragment之间的通信,broadcast用的更多本文以一个activity为例. 效果如图: 布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:…
1.chmod 第一种方式 chomd [{ugoa}{+-=}{rwx}] [文件或者目录] u 代表该文件所属用户 g 代表该文件所属用户组 o 代表访客 a 代表所有用户 +-=分别表示增加权限,减少权限或者赋予权限 让所有用户对t2.tmp文件具有写权限: 第二种方式: chmod [mode=421] [文件或者文件夹] 4 表示读权限 2表示写权限 1表示执行权限 比如:让文件所属用户具有所有权限,所属组具有读和执行权限,其他人具有执行权限,那么可以这么设置: 关于rwx的理解: 2…
1.echo命令我们常用的选项有两个,一个是-n,表示输出之后不换行,另外一个是-e,表示对于转义字符按相应的方式处理,如果不加-e那么对于转义字符会按普通字符处理. 2.echo输出时的转义字符 \b 表示删除前面的空格 \n 表示换行 \t 表示水平制表符 \v 表示垂直制表符 \c \c后面的字符将不会输出,同时,输出完成后也不会换行 \r 输出回车符(但是你会发现\r前面的字符没有了) \a 表示输出一个警告声音 3.echo中的重定向 可以把内容输出到文件中而不是标准输出 echo "…
手动输入一行字符串,并对其排序. 脚本如下: #!/bin/bash #a test about sort echo "please input a number list" read -a arrs for((i=0;i<${#arrs[@]};i++)){ for((j=0;j<${#arrs[@]}-1;j++)){ if [[ ${arrs[j]} -gt ${arrs[j+1]} ]];then tmp=${arrs[j]} arrs[j]=${arrs[j+1]…
1.低版本API对Fragment的支持 Fragment必须被加载进Acitivity中,才能呈现.而在低于3.0版本的API中,由于不存在Fragment,因此必须使用support包: (1)对于1.6(API=4)及以上版本: 创建Fragment时,应该继承android.support.v4.app.Fragment; 创建Activity时,应该继承android.support.v4.app.FragmentActivity; (2)对于2.1(API=7)及以上版本:(为同时支…
一.Lucene搜索过程总论 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程. 其可用如下图示: 总共包括以下几个过程: IndexReader打开索引文件,读取并打开指向索引文件的流. 用户输入查询语句 将查询语句转换为查询对象Query对象树 构造Weight对象树,用于计算词的权重Term Weight,也即计算打分公式中与仅与搜索语句相关与文档无关的部分(红色部分). 构造Scorer对象树,用于计算打分(T…
最近在学习shell编程,文中若有错误的地方还望各位批评指正. 先来看一个简单的求和函数 #!/bin/bash #a test about function f_sum 7 8 function f_sum(){ return $(($1+$2)); } f_sum 3 5; total=$(f_sum 3 6); echo $total,$?; 注意几个问题: 1.shell是逐行执行,所以要在函数声明之后才可调用,否则会有错误 2.我们要获得函数的返回值只能通过$?来获得,不可以通过变量拿…
学习金字塔是美国缅因州的国家训练实验室研究成果,它用数字形式形象显示了:采用不同的学习方式,学习者在两周以后还能记住内容(平均学习保持率)的多少.它是一种现代学习方式的理论.最早它是由美国学者.著名的学习专家爱德加·戴尔1946年首先发现并提出的. 内容编辑 在塔尖,第一种学习方式--"听讲",也就是老师在上面说,学生在下面听,这种我们最熟悉最常用的方式,学习效果却是最低的,两周以后学习的内容只能留下5%. 第二种,通过"阅读"方式学到的内容,可以保留10%. 第三…
转自:http://blog.csdn.net/pplcheer/article/details/12276999 第一阶段-Java基础        这一阶段很重要,关系到你后面阶段的学习,所以务必把这一阶段掌握好:        如果你是0基本,我推荐一本比较好的,适合初学者看的书:明日科技的<Java从入门到精通>,最新版应该是第三版:        这一阶段你要掌握的知识是Java基础,Java面向对象,还有数据库,JDBC,debug断点调试方法,Swing也了解下:       …
触发器我就不多解释了,保证数据的完整性的神器,嗯..也是减少程序员工作托管给数据库操作的好帮手.就不讲一些大道理了.通俗点,我们对数据库的操作,无非就是增 删 改 查. 触发器就是在删,改,增的时候(可以是操作数据前,也可以是操作数据后)额外的帮你做一些事情保证你数据库的完整(PS:不知道为何,我们总监对触发器总是深恶痛绝.. = = ,) 下面就来一发Oracle触发器的基本语法: CREATE OR REPLACE TRIGGER trigger_name(触发器名) <before(操作数…
二进制:以0b开头,只有0和1两种数字.如0101 十进制:0~9十个数字表示.如25 十六进制:以0~9,A~F表示,以0X开头.如0X2B 十进制转换为X进制:连除倒取余 X进制转换为十进制:按权求和. 一个八进制可以由3个二进制表示 一个十六进制可以有4个二进制表示 基本数据类型:大体上分为整型和浮点型 字节:计算机中最小的储存单位   1 Byte=8  bit 整型:   int  4字节           short  2字节           long    4字节或者8字节…
C语言中结构体作为函数参数,有两种方式:传值和传址. 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下,涉及到结构体参数的拷贝,程序空间及时间效率都会受到影响. 例子: typedef struct tagSTUDENT{ char name[20]; int age; }STUDENT; void fun(STUDENT stu) { printf("stu.name=%s,stu.age=%d/…
最近在学shell,记录一下. if语句的使用: 1.判断两个参数大小 #!/bin/sh #a test about if statement a=10 b=20 if [ $a -eq $b ];then echo "parameter a is equal to parameter b" elif [ $a -le $b ];then echo "parameter a is less than parameter b" elif [ $a -gt $b ];…
为了方便的和Windows之间进行交互,samba必不可少. 当然,他的安装使用也很简单: 安装: sudo apt-get install samba sudo apt-get install smbclient 就是这么简单,装好之后可以使用ps -aux查看samba是否启动. 接下来就是修改配置文件了: 配置文件在/etc/samba/smb.conf 使用vi打开配置文件,在文件末尾加上: 保存退出,重启samba,samba restart 重启之后,在Windows浏览器中输入:\…
上一篇说了安装jdk的事,于是趁热打铁,决定把eclipse也安装了. 下载这一系列就不用说了. 下载完成之后: 然后解压,解压之后文件剪切到/usr/software文件夹中,同时重命名为eclipse,剪贴重命名方法参见 ubuntu文件管理常用命令 . 这样eclipse就可以运行了,如图: 不过每次这样敲命令都特别麻烦,我们需要在/usr/bin中添加eclipse启动命令: 这样,在命令行敲eclipse就能启动eclipse了. 版权声明:本文为博主原创文章,未经博主允许不得转载.…
参考文献:ubuntu 13.04 安装 JDK 先去oracle官网下载jdk,这一段我就不赘述了. 下载好之后先解压,解压方式参见 linux常用的压缩与解压缩命令 ,解压之后,将文件剪贴至/usr/lib/中的jvm文件夹中,同时把文件名更换为java,如果没有这个文件夹就自己建一个,剪贴以及新建文件夹命令参见ubuntu文件管理常用命令 . 上面工作做完之后,就可以添加环境变量了 sudo vi ~/.bashrc 在环境变量中添加 export JAVA_HOME=/usr/lib/j…
1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用户 效果图 wall是将一个文件的内容发送出去 3.ping 选项 IP地址 这个命令就不用多讲了吧,测试网络是否连通 4.ifconfig 这个命令用来查看IP地址,注意是ifconfig而不是ipconfig 版权声明:本文为博主原创文章,未经博主允许不得转载.…
这个方法是通用的,不仅仅适用于EditText,也适用于TextView.AutoCompleteTextView等控件. Google官方API并没有给出一个直接的方法用来设置右边图片的点击事件,所以这里我们需要通过点击位置来判断点击事件,效果如图: 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.a…
1.gzip 压缩 gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件] 2.gunzip 解压 这个命令与gzip的功能刚好相反,这个是解压. 用法 gunzip 选项 [压缩文件] 3.tar 这个命令可以将文件打包压缩一起执行,也可以解压缩 压缩用法: tar 选项[zcvf] [目录] -c 产生.tar打包文件 -v 显示详细信息 -f 指定压缩后的文件名 -z 打包同时压缩 压缩后的文件格式.tar.gz 举个栗子:将t3文件夹打包成一个t3.tar.gz的…
说实话,到目前为止我还是不太习惯使用linux自带的帮助文档,遇到问题都是去查我自己下载的chm格式的命令大全,不过这些帮助命令我们还是有必要了解的. 1.man [要查看的命令名称] 例如想要查看ls 命令的帮助,那么输入man ls即可 怎样在使用man命令时进行翻页等操作,可以查看more命令的相关做法. 2.info [任何关键字] 举个栗子:查看ls帮助 info ls 那么man和info有什么区别呢? man是一个参数一个参数来解释的,看起来直观,更易理解 info是使用超链接文本…
1.find find [搜索路径] [搜索关键字] 比如查找/test中文件名为t5.tmp的文件: 查找根目录下大于100M的文件 注意,这里的204800单位是块,1块=512字节 在根目录下查找所有者为lenve的用户 find / -user lenve 查找在根目录下24小时内被修改过属性的文件或者文件夹(这里的1表示1天,即24小时) find / -ctime -1 查找大于80M小于100M的文件 find / -size +163840 -a -size -204800 2.…
ubuntu安装好之后,默认是不能用root用户登录桌面的,只能使用普通用户或者访客登录.怎样开启root用户登录桌面呢? 先用普通用户登录,然后切换到root用户,然后执行如下命令: vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 在打开的文件里添加一句: greeter-show-manual-login=true 这句的意思是在登录时允许用户自己输入用户名和密码. 然后给root用户设置登录密码,设置方式见ubuntu首次给root用…
1.关闭防火墙:ufw disable 2.以.开头的表示隐藏文件 3..和..分别代表当前目录以及当前目录的父目录 4.显示当前用户所在目录pwd 5.touch创建空文件 6.mkdir创建新目录 7.cp -R [源文件夹] [目标文件夹]复制文件夹-R或–recursive表示递归处理,将指定目录下的所有文件与子目录一并处理. 8.cp [源文件] [目标文件]复制文件 9.mv移动文件,同时可以给文件更名 10.rm删除文件,如果要删除文件夹,需要加上参数-R,参数意义和第7条相同 1…
android中的广播用的太多了,今天稍微总结一下. 按注册方式分为两种: 1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一个activity上点击按钮,发送一条广播,这条广播弹出一个toast,显示"静态"二字. 先看看广播接受者: public class MyBroadcast extends BroadcastReceiver { @Override public void onReceive(Cont…