三、索引建立步骤

索引建立步骤


1、创建Directory

Directory directory = FSDirectory.open(new File("D:/test/index01"));

 

2、创建Writer

IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));

 

3、创建文档并且添加索引


            文档和域的概念很重要
            文档相当于表中的每一条记录,域相当于表中每一个字段


            Document document = null;
        
            Collection<File> files = FileUtils.listFiles(new File("D:/test/lucene"),FileFileFilter.FILE, null);
            for (File file : files) {
                document = new Document();
                document.add (new Field ("content ", new FileReader(file)));

                   //域名可以重复使用,在 使用 的时候 这样取出,doc.getValues("content")[1]

                   document.add (new Field ("content ", "可以再次放置一些内容");
                document.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                document.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,Field.Index.NOT_ANALYZED));//是否存储路径,是否进行分词
               
                writer.addDocument (document);
            }

4、查询索引的基本信息


            IndexReader reader = IndexReader.open(directory);
            //通过reader可以有效的获取到文档的数量
            System.out.println("numDocs:" + reader.numDocs() );//可以使用的文档数量
            System.out.println("maxDocs:" + reader.maxDoc() );//所有的文档数量,包括被删除的文档
            System.out.println("deleteDocs:" + reader.numDeletedDocs() );//被删除的文档数量

            reader.close();
      

5、删除索引

//参数是一个选项,可以是一个Query,也可以是一个term,term是一个精确查找的值
//此时删除的文档并不会被完全删除,而是存储在一个回收站中的,可以恢复

writer.deleteDocuments (new Term ("id", "1"));
writer.commit();


6、恢复删除

      try {
           
IndexReader reader = IndexReader.open(directory, false);
            //恢复时,必须把IndexReader的只读(readOnly)设置为false
            reader.undeleteAll ();
            reader.close();


7、强制删除,相当于删除回收站里面的,彻底删除了

writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));
writer.forceMergeDeletes ();


8、优化和合并索引

writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));
//会将索引合并为2段,这两段中的被删除的数据会被清空
//特别注意:此处Lucene在3.5之后不建议使用,因为会消耗大量的开销,

//Lucene会根据情况自动处理的
writer.forceMerge (2);


9、更新索引

            writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35,
                new StandardAnalyzer(Version.LUCENE_35)));
            /*
             * Lucene并没有提供更新,这里的更新操作其实是如下两个操作的合集
             * 先删除之后再添加
             */

            Document doc = new Document();
            doc.add(new Field("id", "11", Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
            doc.add(new Field("email", emails[0], Field.Store.YES, Field.Index.NOT_ANALYZED));
            doc.add(new Field("content", contents[0], Field.Store.NO, Field.Index.ANALYZED));
            doc .add(new Field("name", names[0], Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
            writer.updateDocument(new Term("id", "1"), doc);

            //会把原来id=1的那个文档删掉,新增id=11的那个文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值