- 博客(14)
- 收藏
- 关注
原创 lucene(13)
2021SC@SDUSC搜索过程(3)Lucene搜索样例:public static void main(String[] args){try { IndexReader reader=DirectoryReader.open(FSDirectory.open(new File("F:\\index"))); IndexSearcher searcher=new IndexSearcher(reader); Analyzer analyzer=new Stan...
2021-12-27 08:00:00 115
原创 lucene(11)
搜索过程(1)Lucene搜索样例:public static void main(String[] args){try { IndexReader reader=DirectoryReader.open(FSDirectory.open(new File("F:\\index"))); IndexSearcher searcher=new IndexSearcher(reader); Analyzer analyzer=new StandardAnalyzer(Version...
2021-12-19 10:00:00 197
原创 lucene(12)
2021SC@SDUSC搜索过程(2)从之前分析的过程来看,IndexReader 有以下几个特性:1.段元数据信息已经被读入到内存中,因而索引文件夹中因为新添加文档而新增加的段对已经打开的reader 是不可见的。2..del 文件已经读入内存,因而其他的reader 或者writer 删除的文档对打开的reader 也是不可见的。3.一个IndexReader 打开一个索引,就好像对此索引照了一张像,无论背后索引如何改变,此IndexReader 在被重新打开之前,看到的信息总是相
2021-12-18 19:44:28 386
原创 lucene(10)
2021SC@SDUSCAttributeSource一个AttributeSource中包含着一个由不同AttributeImpl组成的列表,以及添加和获取它们的一些方法。在同一个AttributeSource实例中每个属性只有一个单实例。AttributeSource通过AttributeFactory来创建AttributeImpl的实例。通过State来标示每个AttributeImpl的状态。private final Map, AttributeImpl> attrib..
2021-12-11 10:00:00 319
原创 lucene(9)
2021SC@SDUSCTokenStreamLucene的analysis模块主要负责词法分析及语言处理而形成Term。Lucene的index模块主要负责索引的创建,里面有IndexWriter。Lucene的store模块主要负责索引的读写。Lucene的QueryParser主要负责语法分析。Lucene的search模块主要负责对索引的搜索。Lucene的similarity模块主要负责对相关性打分的实现。通过对文本的分析来建立TokenStreams(分词数.
2021-12-04 15:00:00 284
原创 lucene(8)
2021SC@SDUSCLucene中的CloseableThreadLocal类 Java的ThreadLocal类有一个严重的瑕疵那就是即便在ThreadLocal 实例本身不在被引用的情况下,其中存储的东西也需要相当长的时间才能被解除引用。原因是所有的ThreadLocal 实例共享一个map,而该map只会在指定的时间段内清除过期的条目。 CloseableThreadLocal通过接收WeakReference类型的值并且保持对每个存储值一个硬应用,当调用cl...
2021-11-28 20:45:07 315
原创 lucene(7)
2021SC@SDUSCDirectory类之内存目录 RAMDirectory:常驻内存的Directory实现方式。默认通过SingleInstanceLockFactory(单实例锁工厂)进行锁的实现。该类不适合大量索引的情况。另外也不适用于多线程的情况。 在索引数据量大的情况下建议使用MMapDirectory代替。RAMDirectory是Directory抽象类在使用内存最为文件存储的实现类,其主要是将所有的索引文件保存到内存中。这样可以提高效率。但是如果索引文件过大的话,...
2021-11-21 21:23:11 160
原创 lucene(6)
2021SC@SDUSCDirectory类之文件目录lucene中的文件操作都是通过这Directory来实现的。Directory的实现类可以分为文件目录,内存目录和目录的代理类及工具类。文件目录 SimpleFSDirectory:FSDirectory的简单实现,并发能力有限,遇到多线程读同一个文件时会遇到瓶颈,通常用NIOFSDirectory或MMapDirectory代替 NIOFSDirectory:通过java.nio's FileCha...
2021-11-14 20:34:34 257
原创 lucene分析(5)
索引段的合并索引段合并相关类说明:1.MergePolicyMergePolicy决定着合并操作的顺序。当InexWriter变更索引中的段信息时,IndexWirter将会调用该类中的findMerges方法,去获取需要进行合并的段。该方法会返回一个MergeSpecification对象来描述要合并段的集合。当IndexWriter调用forceMerge方法时,将会调用该类中的findForcedMerges方法,来返回要进行合并的段。默认的MergePolicy的实现类是Tiered
2021-11-07 21:07:36 84
原创 lucene分析(4)
存储同步机制 Lucene的索引最终存储到磁盘的一个目录结构(Directory)中,在创建Directory的过程中会绑定一个LockFactory。LockFactory管理着其创建的所有Lock。LockFactory中有两个基本的属性lockDir(锁文件的存储目录)和lockPrefix(锁的前缀)。如果lockDir与Directory相同,则lockPrefix为空;如果不同,则会把Direcotry的路径经过一系列的算法转换返回一段字符串作为lockPref...
2021-10-31 19:30:59 129
原创 lucene分析(3)
2021SC@SDUSC索引创建过程 文档的索引过程是通过DocumentsWriter的内部数据处理链完成的,DocumentsWriter可以实现同时添加多个文档并将它们写入一个临时的segment中,完成后再由IndexWriter和SegmentMerger合并到统一的segment中去。 DocumentsWriter支持多线程处理,即多个线程同时添加文档,它会为每个请求分配一个DocumentsWriterThreadState对象来监控此处理过程。处理时通...
2021-10-24 19:30:27 148
原创 lucene分析(2)
2021SC@SDUSClucene索引结构搜索的基础是索引文件,因此索引结构对于我的研究工作很有帮助。基本概念: 索引 Lucene的索引由许多个文件组成,这些文件放在同一个目录下段 一个Lucene的索引由多个段组成,段与段之间是独立的。添加新的文档时可以生成新的段,达到阈值(段的个数,段中包含的文件数等)时,不同的段可以合并。 在文件夹下,具有相同前缀的文件属于同一个段 segments.gen 和 seg...
2021-10-17 21:59:40 62
原创 lucene分析(1)
2021SC@SDUSClucene的使用结构索引过程1) 有一系列被索引文件2) 被索引文件经过语法分析和语言处理形成一系列词(Term)。3) 经过索引创建形成词典和反向索引表。4) 通过索引存储将索引写入硬盘。搜索过程1) 用户输入查询语句。2) 对查询语句经过语法分析和语言分析得到一系列词(Term)。3) 通过语法分析得到一个查询树。4) 通过索引存储将索引读入到内存。5) 利用查询树搜索索引,从而得到每个词(Term)的文档链表,对文档链表进行交,差,...
2021-10-10 21:01:24 68
原创 lucene分析综述
2021SC@SDUSC综述项目网站为http://lucene.apache.org/ 我下载的版本为lucene8.9.0。通过阅读readme.txt以及博客上的教程,分析项目,我们认为核心代码位于core文件夹内。故此我们决定对其展开长期研究分析。项目展示及分配我主要负责search和geo文件夹下代码的分析报告工作。当然,需要整体分析才能理解其中一部分功能。对lucene的认识Lucene是一套用于全文检索和搜索的开放源码程序库,由Apache软件基金会支持和提...
2021-09-28 19:54:27 88
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人