《Lucene in Action》(第二版) 第二章节的学习总结 ---- IndexWriter+Document+Field
这一章节的学习,主要是学会如何创建索引,使用索引
一.创建索引
1.从原始文件中提取内容。这里的文件,可以是文本文件,也可以是二进制文件。文本文件(txt),lucene可以直接处理;而二进制文件(word,pdf等),则可以使用Tika框架(Tika是啥,我自己还没学到,先不细说了)。提取的内容,必须的转换成lucene能识别的格式并存储。这里的格式,就是Field以及由多个Field组成的Document。存储在Directory对象中。
2.光转换成Document还不能用,lucene还得对Document进行分析,转换成语汇单元。分析是使用的分析器,即各种Analyzer
3.Lucene是安装倒排索引的方式来存储分析结果(即语汇单元)的。倒排就是:给定一个语汇单元作为key,哪些document含有这个key啊?
4.建立的索引,存储在一些有奇怪后缀名的文件中(包括:fdt,fdx,fnm,frq,nrm,prx,tii,tis,tvd,tvf,tvx,segments.gen,segments_一个数字,等等),具体含义看附录B吧。这也就是书上说的索引段
二.使用索引
1.向索引中加入文档:
创建IndexWriter对象:IndexWriter writer = new IndexWriter(一个Directory对象,一个分析器对象,一个指定索引存储Field最大所需内存大小的值)
创建Document对象,并加入Field:Document doc = new Document(); doc.add(new Field(域名,域值,域存储选项,域索引选项))
向索引中加入文档:writer.addDocument(doc); 最后记得要writer.close();从而才能将索引的变化提交到Directory对象中。
2.删除索引中的文档:
注意:这里删除的是文档(即Document),而不是Field。也就是说,删除的最小单位是Document。而定位要删除哪个Document,可以使用Term对象或者Query对象。然后使用writer.deleteDocuments(Term对象或者Query对象) 即可
要使得其生效,得writer.commit()或者writer.close();
3.更新索引中的文档
lucene的更新,实际就是先删除旧的Document,再添加新的Document。对应方法是:updateDocument(用来匹配旧文档的Term对象,要更新的新文档对象,可选的一个分析器对象)。
4.索引中的文档里面的域,受到域选项的控制。包括:域索引选项,域存储选项,域的项向量选项(这个不大理解,先写在这里而已);同一个域名还能带多个域值
5.由于索引中会有很多文档,一个文档中又有很多域。那么,哪些文档重要,哪些域重要,就可以用加权来进行控制。有文档加权(doc.setBoost(权值))和域加权(field.setboost(权值))。当加权一个文档时,则文档中所有域也就跟着加权了。
这里我有一个疑问:如果一个文档的权值是1.5;而又给该文档中的某个field加权为2.0,那么,这个特别的field的权值是1.5还是2.0,还是别的啥?
6.最后在记录一个索引的“并发,线程安全及锁机制”。记住:
A.任意数量的只读属性的IndexReader类都可以同时打开一个索引;
B.对于一个索引来说,一次只能打开一个IndexWriter类。当IndexWriter打开一个索引后,就在该索引所在Directory中存放了一个锁文件(write.lock)。其他writer就不能再打开咯。
此章节还有一些高级话题,我还没理解,就先不写了
《Lucene in Action》(第二版) 第二章节的学习总结 ---- IndexWriter+Document+Field的更多相关文章
- 《Lucene in Action》(第二版) 第一章节的学习总结 ---- 用最少的代码创建索引和搜索
第一章节是介绍性质,但是通过这一章节的学习,我理解到如下概念: 1.Lucene由两部分组成:索引和搜索.索引是通过对原始数据的解析,形成索引的过程:而搜索则是针对用户输入的查找要求,从索引中找到匹配 ...
- Netty In Action中国版 - 第二章:第一Netty程序
本章介绍 获得Netty4最新的版本号 设置执行环境,以构建和执行netty程序 创建一个基于Netty的server和client 拦截和处理异常 编制和执行Nettyserver和client 本 ...
- C++学习书籍推荐《C++编程思想第二版第二卷》下载
百度云及其他网盘下载地址:点我 编辑推荐 “经典原版书库”是响应教育部提出的使用原版国外教材的号召,为国内高校的计算机教学度身订造的.<C++编程思想>(英文版第2版)是书库中的一本,在广 ...
- 《大数据技术应用与原理》第二版-第二章大数据处理架构Hadoop
2.1概述 Hadoop是Apache旗下的开源分布式计算平台,是基于Java开发的,具有很好的跨平台特性,其中核心文件是MapReduce和HDFS,而HDFS是根据谷歌文件系统GFS开源实现,是面 ...
- 算法竞赛入门经典第二版第二章习题-(练习Java和C++语法)
习题2-1水仙花数(daffodil) 输出1000-999中所有的水仙花数.若三位数ABC满足ABC = A3+B3+C3,则称其为水仙花数. Java: package suanfa; publi ...
- 《HBase in Action》 第三章节的学习总结 ---- 如何编写和运行基于HBase的MapReduce程序
HBase之所以与Hadoop是最好的伙伴,我理解就因为两点:1.HADOOP的HDFS,为HBase提供了分布式的存储方式:2.HADOOP的MR为HBase提供的分布式的计算方法.u 其中第一点, ...
- Lucene.net站内搜索—6、站内搜索第二版
目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...
- Python精要参考(第二版)
ython 精要参考(第二版) 是Python语言初学者不错的参考学习用书,本系列译自Python Essential Reference, Second Edition 希望本系列可以给python ...
- 《Lucene in Action 第二版》第三章节的学习总结----IndexSearcher以及Term和QueryParser
本章节告诉我们怎么用搜索.通过这章节的学习,虽然搜索的内部原理不清楚,但是至少应该学会简单的编写搜索程序了本章节,需要掌握如下几个主要API1.IndexSearcher类:搜索索引的门户,发起者. ...
随机推荐
- luogu P1821 [USACO07FEB]银牛派对Silver Cow Party
题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...
- [BZOJ2142]礼物(扩展Lucas)
2142: 礼物 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2286 Solved: 1009[Submit][Status][Discuss] ...
- Could not automatically select an Xcode project
当把CocoaPods生成的workspace移动到上层目录时,需要改下Pods.xcconfig和工程里的一些设置,就通常没什么难度. 当遇到这个问题时: Could not automatical ...
- ios禁用多按钮同时按下操作
[button setExclusiveTouch:YES]; 设置每个button的setExclusiveTouch:YES,可避免同时按下多个的问题
- VMware给虚拟机绑定物理网卡
前言: 桥接模式:就是使用真实的IP地址 NAT模式:使用以VMnet 8所指定的子网中分配的IP地址,在外网信息交互中不存在这样的IP. 仅主机模式:仅用于虚拟机与真机之间的信息交互. 操作步骤: ...
- 1084. Broken Keyboard (20)【字符串操作】——PAT (Advanced Level) Practise
题目信息 1084. Broken Keyboard (20) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B On a broken keyboard, some of ...
- 一个人的安全部之ELK接收Paloalto日志并用钉钉告警
起因 通报漏洞后,开发未能及时修复漏洞,导致被攻击,领导说我发现被攻击的时间晚了,由于一个人安全部精力有限未能及时看IPS告警,于是做了个钉钉告警. 本人环境介绍 ubuntu 14.04 pytho ...
- depth linear
float ConvertDepth( float depthFromTex, float4 cameraParams ){ const float near = cameraParams.z; co ...
- selenium执行报错:Process refused to die after 10 seconds, and couldn't taskkill it
十二月 02, 2015 5:16:56 下午 org.openqa.selenium.os.ProcessUtils killWinProcess 警告: Process refused to di ...
- UVa 10192 - Vacation & UVa 10066 The Twin Towers ( LCS 最长公共子串)
链接:UVa 10192 题意:给定两个字符串.求最长公共子串的长度 思路:这个是最长公共子串的直接应用 #include<stdio.h> #include<string.h> ...