对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后的文章中进行分析. Lucene的索引过程,很多的博客,文章都有介绍,推荐大家上网搜一篇文章:<Annotated Lucene>,好像中文名称叫<Lucene源码剖析>是很不错的. 想要真正了解Lucene索引文件过程,最好的办法是跟进代码调试,对着文章看代码,这样不但能够最详细准确…
一.段合并过程总论 IndexWriter中与段合并有关的成员变量有: HashSet<SegmentInfo> mergingSegments = new HashSet<SegmentInfo>(); //保存正在合并的段,以防止合并期间再次选中被合并. MergePolicy mergePolicy = new LogByteSizeMergePolicy(this);//合并策略,也即选取哪些段来进行合并. MergeScheduler mergeScheduler = n…
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene的打分公式非常复杂,如下: 在推导之前,先逐个介绍每部分的意义: t:Term,这里的Term是指包含域信息的Term,也即title:hello和content:hello是不同的Term coord(q,d):一次搜索可能包含多个搜索词,而一篇文档中也可能包含多个搜索词,此项表示,当一篇文档中包…
Lucene总的来说是: 一个高效的,可扩展的,全文检索库. 全部用Java实现,无须配置. 仅支持纯文本文件的索引(Indexing)和搜索(Search). 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程. 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点. 让我们更细一些看Lucene的各组件: 被索引的文档用Document对象 表示. IndexWriter 通过函数a…
一.总论 根据http://lucene.apache.org/java/docs/index.html 定义: Lucene 是一个高效的,基于Java 的全文检索库. 所以在了解Lucene之前要费一番工夫了解一下全文检索. 那么什么叫做全文检索呢?这要从我们生活中的数据说起. 我们生活中的数据总体分为两种:结构化数据 和非结构化数据 . 结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据: 指不定长或无固定格式的数据,如邮件,word文档等. 当然有的地方还会…
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程. Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程. 本文详细解读了Apache Lucene - Index File Formats(http://lucene.apache.or…
datagridview.CurrentCell.RowIndex;            是当前活动的单元格的行的索引 datagridview.SelectedRows  ;                        是选中行的集合 datagridview.SelectedColumns ;                   是选中列的集合 datagridview.SelectedCells  ;                        是选中单元格的集合 DataGridV…
使用javascript闭包获取table标签中tr的索引 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en&quo…
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]…
一.Lucene搜索过程总论 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程. 其可用如下图示: 总共包括以下几个过程: IndexReader打开索引文件,读取并打开指向索引文件的流. 用户输入查询语句 将查询语句转换为查询对象Query对象树 构造Weight对象树,用于计算词的权重Term Weight,也即计算打分公式中与仅与搜索语句相关与文档无关的部分(红色部分). 构造Scorer对象树,用于计算打分(T…
一.基础内容 0.官方文档说明 (1)org.apache.lucene.index provides two primary classes: IndexWriter, which creates and adds documents to indices; and IndexReader, which accesses the data in the index. (2)涉及的两个主要包有: org.apache.lucene.index:Code to maintain and acces…
一.向Solr提交索引的方式 1.使用post.jar进行索引 (1)创建文档xml文件 <add> <doc> <field name="id">test4</field> <field name="title">testagain</field> <field name="url">http://www.163.com</field> </d…
1.基础内容 (1)相关概念 分析(Analysis),在Lucene中指的是将域(Field)文本转换成最基本的索引表示单元--项(Term)的过程.在搜索过程中,这些项用于决定什么样的文档能够匹配查词条件. 分析器对分析操作进行了封装,它通过执行若干操作,将文本转化成语汇单元,这个处理过程也称为语汇单元化过程(tokenization),而从文本洲中提取的文本块称为语汇单元(token).词汇单元与它的域名结合后,就形成了项. (2)何时使用分析器 建立索引期间 Directory retu…
一.关于Velocity的基本配置 在Solr中,可以以多种方式返回搜索结果,如单纯的文本回复(XML.JSON.CSV等),也可以返回velocity,js等格式.而VelocityResponseWriter就是用于将返回velocity类型文本,以便直接用于结果呈现. 在Solr提供的example,其中的一个RequestHandler--/browse,使用了VelocityResponseWriter.其配置如下: <requestHandler name="/browse&q…
最近在学习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.我们要获得函数的返回值只能通过$?来获得,不可以通过变量拿…
UIView 视图类,视图都是UIView或者UIView子类 UIWindow 窗口类,用于展示视图,视图一定要添加window才能显示 注意:一般来说,一个应用只有一个window 创建一个UIWindow对象 UIScreen 屏幕类 [UIScreen mainScreen]主屏幕 [[UIScreen mainScreen]bounds]获得主屏幕大小 如: 1.创建工程 2.把ARC改为MRC 3.window的属性由string改为retain 4.重写dealloc方法,对_wi…
今天ArcGIS的SDE发生了一点小故障,导致系统表丢失,所以需要重建一下SDE数据库,在删除SDE用户和所在的表空间过程中遇到下面两个ORA错误,解决方法如下: 1)删除表空间时报错:ORA-29857:表空间中存在域索引和/或次级对象: 2)这个错误的原因很可能是因为这个表空间是某个用户默认的表空间,所以需要删除隶属于这个表空间的用户,才可以进行删除. 那么,怎样查询这个默认表空间中的用户呢,很简单,如下图: 3)根据查询后的结果,SDE用户的表空间为BaseMap,导致表空间无法删除,所以…
学习金字塔是美国缅因州的国家训练实验室研究成果,它用数字形式形象显示了:采用不同的学习方式,学习者在两周以后还能记住内容(平均学习保持率)的多少.它是一种现代学习方式的理论.最早它是由美国学者.著名的学习专家爱德加·戴尔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 版权声明:本文为博主原创文章,未经博主允许不得转载.…