3.Lucene3.x API分析,Director 索引操作目录,Document,分词器
1 Lucene卡发包结构分析
|
包名 |
功能 |
|
org.apache.lucene.analysis |
Analysis提供自带的各种Analyzer |
|
org.apache.lucene.collation |
包含collationKeyFilter和collationKeyAnalyzer两个相同功能的类,将所有token转为CollationKey,与IndexableBinaryStringTools一起存为term |
|
org.apache.lucene.document |
Document包中是Document相关各种数据结构,如Document类,Field类等 |
|
org.apache.lucene.index |
index包中是索引的读写操作类,常用的是对索引文件的segment进行写、合并和优化的IndexWriter类和对索引进行读取和删除操作的IndexReader类 |
|
org.apache.lucene.queryParser |
queryParser包中是解析查询语句相关的类(常用的是QueryParser类) |
|
org.apache.lucene.search |
检索管理,根据查询条件,检索得到结果search包中是从索引中进行搜索的各种不同的Query类(如TermQuery、BooleanQuery等)和搜索结果集Hits类 |
|
org.apache.lucene.store |
store包中是索引的存储相关类,如Directory类定义了索引文件的存储结构,FSDirectory是存储在文件系统(即磁盘)中的索引存储类,RAMDirectory为存储在内存中的索引存储类 |
|
org.apache.lucene.util |
util包中是公共工具类,例如时间和字符串之间的转换工具 |
2 Director
索引操作目录
FSDirectory :磁盘路径,在磁盘中创建文件索引库
RAMDirectory:内存路径,指在内存中创建文件索引库
|
//当前工程index目录,相对路径 FSDirectory.open(new //绝对路径 FSDirectory.open(new //在类路径下创建 FSDirectory.open(new //内存路径 RAMDirectory |
3
分词器(主要要完全搜索的不要分词,比如当查询书的书号时不分词)
Analyzer 分词器
new StandardAnalyzer(Version.LUCENE_36); //建立标准分词器,对于汉子采用单自分词
4
Document索引中文对象,Field文档内部数据信息
每个数据对象,对应一个Document对象
对应一个属性,对应一个Field对象
newField(fieldname,value,Store,Index);
将数据建立索引库Field,Store决定是否存储,Index决定是否索引分词
|
Store.YES Index.NO Index.ANALYZED Index.NOT_ANALYZED Index.ANALYZED_NO_NORMS Index.NOT_ANALYZED_NO_NORMS |
|
Document document = document.add(new Index.NOT_ANALYZED));//对于id通常不分词的 document.add(newField("title",article.getTitle(),Store.YES,Index.ANALYZED)); document.add(new |
|
@Test // public // String queryString = "Lucene"; // // // Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36); QueryParser queryParser = new QueryParser(Version.LUCENE_36, analyzer); Query query = queryParser.parse(queryString); // // Directory directory = FSDirectory.open(new IndexSearcher indexSearcher = new IndexSearcher( IndexReader.open(directory)); // TopDocs topDocs = indexSearcher.search(query, 100); System.out.println("满足结果记录条数:" // ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (int // int docID = scoreDocs[i].doc; Document document = indexSearcher.doc(docID); System.out.println("得分:" System.out.println("id:" System.out.println("title:" System.out.println("content:" } indexSearcher.close(); } |
|
运行结果: |
|
是否分词, 是否存储, norm是按照词频计算的 问题:Index.ANALYZED 和 Index.ANALYZED_NO_NORMS 区别 Index.ANALYZED 会保存权重信息 Index.ANALYZED_NO_NORMS 不会保存权重信息 权重会影响得分,得分计算排名, * * norm index.ANALYZED_NO_NORMS |
4
索引创建过程
分词器Analyzer
目录Directory
进入索引写入,必须使用IndexWriter,但是在初始化IndexWriter过程中,对目标索引库加锁。
当试图对一个索引库创建多个IndexWriter时,报异常
org.apache.lucene.util.SetOnce$AlreadySetException:The object cannot be set twice!
*使用同一 indexWriterConfig
两次
org.apache.lucene.store.LockObtainFailedException:Lock obtain timed out:NativeFSLock@D:\work\javaee20130408\lucene3_day1\index\write.lock
*试图创建第二个IndexWriter
,第一个IndexWriter
还没有关闭,锁文件还在
问题:如果两个线程同时对一个索引库操作怎么办?---解决办法:只能使用同一个IndexWriter对象
3.Lucene3.x API分析,Director 索引操作目录,Document,分词器的更多相关文章
- elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
一.分词器 1. 认识分词器 1.1 Analyzer 分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...
- Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】
对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...
- elasticsearch入门使用(四) 索引、安装IK分词器及增删改查数据
一.查看.创建索引 创建一个名字为user索引: curl -X PUT 'localhost:9200/stu' {"acknowledged":true,"shard ...
- solr常用操作及集成分词器或cdh集群部署说明
首先,如果是从http://lucene.apache.org/solr/下载的solr,基本都是自带集成的jetty服务,不需要单独搭建tomcat环境,但是要注意jdk版本,直接解压通过cmd命令 ...
- 4.Lucene3.案例介绍,创建索引,查询等操作验证
案例: Article.java package cn.toto.lucene.quickstart; publicclassArticle { privateintid; private St ...
- elasticsearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解
一.快速入门1. 查看集群的健康状况http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状 ...
- lucene全文搜索之二:创建索引器(创建IKAnalyzer分词器和索引目录管理)基于lucene5.5.3
前言: lucene全文搜索之一中讲解了lucene开发搜索服务的基本结构,本章将会讲解如何创建索引器.管理索引目录和中文分词器的使用. 包括标准分词器,IKAnalyzer分词器以及两种索引目录的创 ...
- Elasticsearch (1) - 索引库 文档 分词
创建索引库 ES的索引库是一个逻辑概念,它包括了分词列表及文档列表,同一个索引库中存储了相同类型的文档.它就相当于MySQL中的表,或相当于Mongodb中的集合. 关于索引这个语: 索引(名词):E ...
- elasticsearch indices.recovery 流程分析(索引的_open操作也会触发recovery)——主分片recovery主要是从translog里恢复之前未写完的index,副分片recovery主要是从主分片copy segment和translog来进行恢复
摘自:https://www.easyice.cn/archives/231 elasticsearch indices.recovery 流程分析与速度优化 目录 [隐藏] 主分片恢复流程 副本分片 ...
随机推荐
- UOJ #206. 【APIO2016】Gap
Description Solution 第一个子任务,直接从 \((a[i],a[j])\) 推出 \((a[i+1],a[j-1])\) 就行了,只需要 \(\frac{N+1}{2}\) 第二个 ...
- poj 3070 Fibonacci 矩阵快速幂
Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...
- [2017/5/28]FJ四校联考
来自FallDream的博客,未经允许,请勿转载,谢谢. 话说这一段时间算是过去了,好久好久之后终于又有联考了 没想到这次到我们学校出题,昨天才想起来,临时花一天赶了一套,我出了一个sbFFT,质量 ...
- bzoj3963[WF2011]MachineWorks cdq分治+斜率优化dp
3963: [WF2011]MachineWorks Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 270 Solved: 80[Submit][S ...
- 《java技术》第二次作业
(一)学习总结 1.什么是构造方法?什么是构造方法的重载? 1)没有返回值,名字与类名相同,当新对象被创建的时候,构造函数会被调用,要想构造函数,必须声明对象并对其初始化.每一个类都有构造函数,如果没 ...
- ChatGirl is an AI ChatBot based on TensorFlow Seq2Seq Model
Introduction [Under developing,it is not working well yet.But you can just train,and run it.] ChatGi ...
- 阿里2019实习内推,五轮技术面+一轮HR面,Java岗面经
在牛客网上获取到很多知识和信息,现在反馈一波,希望能对广大找实习的同学有所帮助. 个人情况:EE方向渣硕,二月末内推了阿里集团某部门Java岗,约三周完成了所有面试. 面经如下: 一面 (简历评估): ...
- 读书笔记-《Maven实战》-2018/4/17
第五章 坐标和依赖 1.如同笛卡尔坐标系一样,Maven也通过坐标三元素定位一个资源. <groupId>com.dengchengchao.test</groupId> &l ...
- 【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群
http://www.csdn.net/article/2014-11-06/2822529/3 大规模流量的网站架构,从来都是慢慢"成长"而来.而这个过程中,会遇到很多问题,在不 ...
- requestAnimationFrame之缓动的应用
之前需要使用的定时器的时,立马想到的是setInterval(),用着用着就成为习惯,并没有遇到什么不妥之处.习惯性的操作往往容易让一个人拒绝尝试一些其他的方法.现在的方法用得好好的,没事干啥找其他法 ...