当前位置:首页 > 开发 > 编程语言 > 搜索 > 正文

Lucene增量索引的搜索结果重复的问题

发表于: 2010-12-11   作者:hotsunshine   来源:转载   浏览次数:
摘要: Lucene的增量索引没有那么智能,虽然根据文档所言,把下面的第三个参数设为false就是增量索引(true to create the index or overwrite the existing one; false to append to the existing index,注意这个append)。但是我发现,它与true的区别,仅仅在于不去删掉以前所有的索引文件而已,他并不能智能的分
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增量索引的搜索结果重复的问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
设计一用户界面,例如基于B/S结构的: 把Lucene等程序包和开发的检索程序(类)导入到检索页面中,
清明节放假期间,就一直在思考着Lucene增量索引问题,通过google我了解到了Zoie的存在,于是就开始2
清明节放假期间,就一直在思考着Lucene增量索引问题,通过google我了解到了Zoie的存在,于是就开始2
在应用中很多时候,我们都是将IndexWriter 和 IndexSearch做成单例模式,这时会出现一种现象:即使I
lucene简介 创建索引和搜索初步 一、什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,
最近再看Lucene,在网上也看了不少的例子,现在把我做的拿出来。 1、首先去http://mirrors.cnnic.cn
采用技术:Jsp+Servlet+Lucene3.0+IK Analyzer3.0 感谢JavaEye的各位前辈,让小弟我能够顺利完成我
//主类 package Java.se.lucene; import java.io.File; import java.io.IOException; import java.t
eric_chen 搜索引擎lucene实现 写这个东西就是两个目的,一是让自己头脑清醒,一是让别人把咱的头脑
为了统一,我采用了ff+firebug,以firebug给出的数据为准。当然由于测试方法简陋,测试点局限,结果
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号