Lucene的增量索引没有那么智能,虽然根据文档所言,把下面的第三个参数设为false就是增量索引(true to create the index or overwrite the existing one; false to append to the existing index,注意这个append)。但是我发现,它与true的区别,仅仅在于不去删掉以前所有的索引文件而已,他并不能智能的分析到当前要被索引的文件是否已经被索引过,因此对先前文档作了修改,要重建索引的话,必须删除先前的这个文档所对应的索引
new IndexWriter(indexDir, new StandardAnalyzer(), false, new IndexWriter.MaxFieldLength(10000));
建立索引的关键步骤就是对IndexWriter添加Document,我是对文本文件进行分析的
File f = new File("text.txt");
Document doc = new Document();
doc.add(new Field("content", new FileReader(f))); // 由于文件内容比较大,没有保存,如果是要做高亮搜索词的话,需要保存,分析,并且指定词向量参数Field.TermVector
doc.add(new Field("title", "要被索引的字符串", Field.Store.YES, Field.Index.ANALYZED));
writer.addDocument(doc);
参数的说明:
Field.Store.YES表示要对这个字符串进行存储,Field.Index.ANALYZED表示要对个字符串进行分析
虽然设置了增量索引,如果运行两次这个索引的代码,然后去搜索的话,会出现两条相同的结果。考虑到,一条doc对应一个文件,便想着给doc添加一个唯一标示的字段,索引之前检测是否存在,如果已经存在删除之
doc.add(new Field("fileid", "自定义的id", Field.Store.YES, Field.Index.NOT_ANALYZED));
保存这个id字段,但是不要对这个字段进行分析,如果分析了,对索引结果会有影响。刚开始计划使用文本路径设置id,但是不起作用,只有文件名的话可以,但没有唯一性,id的定制很重要。
删除doc的代码
writer.deleteDocuments(new Term("fileid", "自定义的id"));
关于是用IndexWriter来删除还是用IndexReader来删除可以参考下面文章
http://www.cnblogs.com/huangfox/archive/2010/10/14/1851031.html
为保持数据一致,作者建议使用indexwriter来做删除操作
分享到:
相关推荐
本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...
Lucene本身并不直接支持增量索引,因此,开发者们开发了Zoie系统,它是基于Lucene的一个扩展,旨在解决大数据量场景下的实时索引问题。Zoie的名字来源于“Zero Indexing Overhead”,即零索引开销,它的核心思想是...
总结,Lucene作为强大的全文搜索引擎,其分词搜索、增量索引和全量索引机制为企业级应用提供了高效的检索解决方案。理解并灵活运用这些概念,能帮助开发者优化系统性能,提升用户体验。在实际应用中,应根据数据规模...
Lucene 是一个高性能、全文本搜索库,被广泛用于构建高效的搜索引擎和信息检索系统。它提供了完整的搜索功能,包括分析、索引、查询以及结果排序等。在Java开发中,Lucene 提供了丰富的API来简化这些操作。以下是...
- **索引构建**:Lucene支持增量索引和批量索引,可以处理数据源的小幅变化或大规模数据。数据库通常需要全量重建索引,尤其是在数据发生变化时。 - **结果输出**:数据库查询返回RecordSet,而Lucene查询返回Hits...
Lucene 提供了强大的文本分析、索引创建、文档检索以及搜索结果排序等功能。在 .NET 平台上,Lucene.net 提供了与原生 Lucene 相同的强大功能,并且完全兼容 .NET Framework 和 .NET Core。 1. **文本分析(Text ...
我们的测试结果表明,全量索引和增量索引都可以正确地将数据插入 Solr 索引库中,并且可以实时地更新索引。 结论 通过以上测试结果,我们可以看到,Solr 数据库插入全量和增量索引可以正确地将数据插入 Solr 索引...
Solr,作为一款流行的开源全文搜索引擎,经常被用于大规模数据的快速检索。增量导入更新索引包是Solr中的一项重要功能,它允许系统仅处理自上次完整索引以来发生改变的数据,从而大大提升了效率并降低了资源消耗。...
1. **性能优化**: 使用多线程并行索引,或者利用NRT(Near Real Time)特性,实现更快的增量索引。 2. **查询优化**: 使用过滤器(Filter)、布尔查询(BooleanQuery)和短语查询(PhraseQuery)等提高查询效率。 ...
Lucene支持增量索引,意味着可以对新的或已更改的数据进行实时更新。索引优化则是一次性合并多个段(segments)的过程,以提高搜索性能。 5. **搜索结果相关性** Lucene通过TF-IDF(Term Frequency-Inverse ...
除了倒排索引,Lucene还支持增量索引,这意味着可以只对文档的更改部分进行索引更新,而不是重新对整个文档集进行索引,从而节省资源并提高效率。 然而,尽管Lucene提供了强大的索引能力,但在实际应用中,随着索引...
IndexWriter支持增量索引,即在已有索引的基础上添加新的文档,以及批量导入大量数据。 三、搜索过程 1. 查询构造:Lucene支持多种查询语法,如布尔查询、短语查询、范围查询等。通过QueryParser,我们可以根据...
- 增量索引:在大型数据集上,应采用增量索引策略,避免一次性加载所有数据。 - 使用自定义ScoreFunction:根据业务需求,自定义评分函数,使搜索结果更符合用户期望。 - 利用Filter和QueryWrapperFilter:过滤无关...
6. **更新与增量索引**:Lucene支持实时更新,可以仅索引新数据或修改过的数据。 ### 四、实战案例 - **全文检索例子.doc**:这个文档可能包含一个或多个示例,演示如何在实际项目中创建索引、执行查询和处理搜索...
增量索引技术是现代搜索引擎和信息检索系统不可或缺的一部分,它能够有效应对大规模数据集的实时变化需求。通过采用合适的监测机制和优化策略,可以极大地提高索引更新的速度和稳定性。此外,面对实际应用中遇到的...
**基于Lucene搜索引擎的Java...这不仅涉及到了Lucene的核心功能,也涵盖了实际项目中常见的增量索引和数据库集成问题。通过阅读和理解这些源码,你将能够熟练地在自己的项目中应用Lucene,提高搜索功能的效率和准确性。
lucene为数据库搜索建立增量索引.txt lucene数据库索引.txt 新闻系统全文检索的思绪.txt lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt ...
本文将深入探讨如何利用 Lucene.NET 实现全文检索,包括增量索引、更新索引和删除索引等关键操作。 **1. 全文检索基础** 全文检索是通过分析文本中的关键词来查找相关信息的技术。Lucene.NET 提供了一种高效的倒排...
2. 索引构建:使用IndexWriter对象,将Document批量写入索引,支持实时更新和增量索引。 3. 查询解析:QueryParser解析用户输入的查询字符串,生成对应的Query对象。 4. 搜索执行:使用Searcher对象,执行Query...
4. **实时性需求**:如果应用需要实时更新索引,需要考虑增量索引和实时搜索的实现,确保新添加的数据能快速被搜索到。 5. **中文处理**:中文的分词难度较大,需要选择合适的分词器,并处理好词性的识别和词语的...