查看完整版本: 为自己的系统搞个全文搜索

lqm526 2007-9-19 14:04

为自己的系统搞个全文搜索

[align=center][align=center][color=black][font=宋体][size=10.5pt]为自己的系统搞个全文搜索[/size][/font][/color][color=black][font=Arial][size=10.5pt][/size][/font][/color][/align][/align][color=black][font=Arial][size=10.5pt] [/size][/font][/color]
[align=left][align=left][color=black][font=宋体][size=10.5pt]在本文我又提到[/size][/font][/color][color=black][font=Arial][size=10.5pt]lucene[/size][/font][/color][color=black][font=宋体][size=10.5pt]了,在[/size][/font][/color][color=black][font=Arial][size=10.5pt]java[/size][/font][/color][color=black][font=宋体][size=10.5pt]业界,提到全文检索,几乎没有什么人不知道它。用[/size][/font][/color][color=black][font=Arial][size=10.5pt]google[/size][/font][/color][color=black][font=宋体][size=10.5pt]搜索一下,满世界都是有关资料。具有代表性的就是车东的[/size][/font][/color][color=black][font=Arial][size=10.5pt]“[/size][/font][/color][color=black][font=宋体][size=10.5pt]基于[/size][/font][/color][color=black][font=Arial][size=10.5pt]Java[/size][/font][/color][color=black][font=宋体][size=10.5pt]的全文索引引擎[/size][/font][/color][color=black][font=Arial][size=10.5pt]Lucene [/size][/font][/color][color=black][font=宋体][size=10.5pt]简介[/size][/font][/color][color=black][font=Arial][size=10.5pt]”[/size][/font][/color][color=black][font=宋体][size=10.5pt],我要写的也就只有最简单的三板斧,再加上支持中文的[/size][/font][/color][color=black][font=Arial][size=10.5pt]Chinese Analyzer [/size][/font][/color][color=black][font=宋体][size=10.5pt]以及按照时间排序的搜索结果排序方法。这些都可以在其他地方找到相关资料,我只是把他们提出来,作为[/size][/font][/color][color=black][font=Arial][size=10.5pt]lucence [/size][/font][/color][color=black][font=宋体][size=10.5pt]应用中经常遇到的麻烦解决办法。去年[/size][/font][/color][color=black][font=Arial][size=10.5pt]MSN[/size][/font][/color][color=black][font=宋体][size=10.5pt]上面有个朋友跟我提到希望用[/size][/font][/color][color=black][font=Arial][size=10.5pt]lucene[/size][/font][/color][color=black][font=宋体][size=10.5pt]构建个网站的全文检索,我当时就觉得很简单,直说没问题没问题,不过他提到一个要求就是搜索结果要安装时间排序,我查阅了些资料,发现[/size][/font][/color][color=black][font=Arial][size=10.5pt]lucene[/size][/font][/color][color=black][font=宋体][size=10.5pt]并不提供用户自定义排序方式,而只能按照自己相关性算法排序。后来我在车东的[/size][/font][/color][color=black][font=Arial][size=10.5pt]weblucene[/size][/font][/color][color=black][font=宋体][size=10.5pt]项目找到了[/size][/font][/color][color=black][font=Arial][size=10.5pt]IndexOrderSearcher[/size][/font][/color][color=black][font=宋体][size=10.5pt]。[/size][/font][/color][color=black][font=Arial][size=10.5pt][/size][/font][/color][/align][/align][align=left][align=left][color=black][font=宋体][size=10.5pt]解决了结果排序常规需求。[/size][/font][/color][color=black][font=Arial][size=10.5pt]IndexOrderSearcher[/size][/font][/color][color=black][font=宋体][size=10.5pt]跟一般[/size][/font][/color][color=black][font=Arial][size=10.5pt]IndexSearch[/size][/font][/color][color=black][font=宋体][size=10.5pt]使用差不多,仅仅在构建对象的时候多加一个参数[/size][/font][/color][color=black][font=Arial][size=10.5pt]IndexOrderSearcher.ORDER_BY_DOCID_DESC
IndexOrderSearcher indexsearcher = new IndexOrderSearcher("/home/lucenetest/index",IndexOrderSearcher.ORDER_BY_DOCID_DESC);
[/size][/font][/color][color=black][font=宋体][size=10.5pt]新版本的[/size][/font][/color][color=black][font=Arial][size=10.5pt]lucene[/size][/font][/color][color=black][font=宋体][size=10.5pt]还提供了一个[/size][/font][/color][color=black][font=Arial][size=10.5pt]MultiFieldQueryParser[/size][/font][/color][color=black][font=宋体][size=10.5pt],可以同时检索多个字段,以前[/size][/font][/color][color=black][font=Arial][size=10.5pt]QueryParser[/size][/font][/color][color=black][font=宋体][size=10.5pt]比较麻烦。[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]private[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]static[/size][/font][/color][color=black][font=Arial][size=10.5pt]  ChineseAnalyzer  chineseAnalyzer  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  ChineseAnalyzer();
    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]public[/size][/font][/color][color=black][font=Arial][size=10.5pt]  Hits  search(String  queryText){
                [/size][/font][/color][color=blue][font=Arial][size=10.5pt]if[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (queryText  ==  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt]){
                    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]return[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt];
  }
  Query  query;
  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]try[/size][/font][/color][color=black][font=Arial][size=10.5pt]{
      query  =  MultiFieldQueryParser.parse(queryText,  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  String[]{"title"},chineseAnalyzer);
      [/size][/font][/color][color=blue][font=Arial][size=10.5pt]return[/size][/font][/color][color=black][font=Arial][size=10.5pt]  indexsearcher.search(query);
  }[/size][/font][/color][color=blue][font=Arial][size=10.5pt]catch[/size][/font][/color][color=black][font=Arial][size=10.5pt](Exception  e){
      [/size][/font][/color][color=blue][font=Arial][size=10.5pt]return[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt];
  }
}
[/size][/font][/color][color=black][font=宋体][size=10.5pt]下面是构建索引,定时从数据库取出数据索引,做完记录完成时间,我是把时间写入一个[/size][/font][/color][color=black][font=Arial][size=10.5pt]txt[/size][/font][/color][color=black][font=宋体][size=10.5pt]文件。[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]package[/size][/font][/color][color=black][font=Arial][size=10.5pt]  com.test.search;
[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  org.apache.lucene.analysis.Analyzer;
[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  org.apache.lucene.analysis.cn.*;
[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  org.apache.lucene.analysis.standard.StandardAnalyzer;
[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  org.apache.lucene.document.*;
[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  org.apache.lucene.index.*;

[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  java.io.*;
[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  java.sql.*;
[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  java.util.Date;

[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  com.test.db.*;
[/size][/font][/color][color=blue][font=Arial][size=10.5pt]import[/size][/font][/color][color=black][font=Arial][size=10.5pt]  com.test.utility.*;

[/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]/**
  *  Title:  SearchIndexer
  *  Description:  [/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]全文索引[/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]
  *  Copyright:      Copyright  (c)  2001
  *  Company:  test
  *  @author  Sean
  *  @version  1.0
  */[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]public[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]class[/size][/font][/color][color=black][font=Arial][size=10.5pt]  SearchIndexer  {
    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]private[/size][/font][/color][color=black][font=Arial][size=10.5pt]  String  indexPath  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt];
    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]protected[/size][/font][/color][color=black][font=Arial][size=10.5pt]  Analyzer  analyzer  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  ChineseAnalyzer();

    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]public[/size][/font][/color][color=black][font=Arial][size=10.5pt]  SearchIndexer(String  s)  {
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]this[/size][/font][/color][color=black][font=Arial][size=10.5pt].indexPath  =  s;
    }
    [/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]/**
      *  [/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]索引某日期以前的所有文档[/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]
      *  @param  fromdate
      *  @return
      */[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]public[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]final[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]void[/size][/font][/color][color=black][font=Arial][size=10.5pt]  updateIndex(String  fromdate)  {
        Connection  conn  =  DbUtil.getCon();
        IndexWriter  indexWriter  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt];
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]try[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
            indexWriter  =  getWriter([/size][/font][/color][color=blue][font=Arial][size=10.5pt]false[/size][/font][/color][color=black][font=Arial][size=10.5pt]);
          [/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]//[/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]索引发布系统内部文件[/size][/font][/color]
[color=black][font=Arial][size=10.5pt]                PreparedStatement  pstm  =  conn.prepareStatement(
                        "select  title,body,creationtime  from  document  where  creationtime  >  '"  +  fromdate  +
                        "'  order  by  creationtime");
                ResultSet  rs  =  pstm.executeQuery();
                [/size][/font][/color][color=blue][font=Arial][size=10.5pt]while[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (rs.next())  {
                    String  creationtime  =  rs.getString("creationtime");
                    String  title  =  rs.getString("title");
                    String  body  =  rs.getString("body");

                    
                    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]if[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (title  ==  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt]  ||  body  ==  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt])  {
                        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]continue[/size][/font][/color][color=black][font=Arial][size=10.5pt];
                    }
                    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]try[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
                        addDocsToIndex(title,body,  creationtime,indexWriter);
                    }
                    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]catch[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (Exception  ex)  {
                        ex.printStackTrace();
                    }
              }
            indexWriter.optimize();
        }
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]catch[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (Exception  ex)  {
            ex.printStackTrace();
        }
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]finally[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]try[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
                indexWriter.close();
                conn.close();
            }
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]catch[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (Exception  e)  {
                e.printStackTrace();
            }
        }
    }
    [/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]/**
      *  [/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]检查索引文件是否存在[/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]
      *  @param  s
      *  @return  [/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]索引是否存在[/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]
      */[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]private[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]boolean[/size][/font][/color][color=black][font=Arial][size=10.5pt]  indexExists(String  s)  {
        File  file  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  File(s  +  File.separator  +  "segments");
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]return[/size][/font][/color][color=black][font=Arial][size=10.5pt]  file.exists();
    }
    [/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]/**
      *  [/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]增加一组索引[/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]
      *  @param  title
      *  @param  body
      *  @param  creationtime
      *  @param  indexwriter
      *  @return
      */[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]private[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]final[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]void[/size][/font][/color][color=black][font=Arial][size=10.5pt]  addNewsToIndex(String  docid,  String  url,String  title,  String  body,
                                                                            String  ptime,  IndexWriter  indexwriter)  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]throws[/size][/font][/color][color=black][font=Arial][size=10.5pt]
            IOException  {
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]if[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (indexwriter  ==  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt])  {
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]return[/size][/font][/color][color=black][font=Arial][size=10.5pt];
        }
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]else[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]try[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
                Document  document  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  Document();
                document.add(Field.Text("title",  title));
                document.add(Field.Text("body",  body));
                document.add([/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  Field("creationtime",  creationtime,  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]true[/size][/font][/color][color=black][font=Arial][size=10.5pt],  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]true[/size][/font][/color][color=black][font=Arial][size=10.5pt],  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]false[/size][/font][/color][color=black][font=Arial][size=10.5pt]));
                indexwriter.addDocument(document);
            }
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]catch[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (Exception  ex)  {
        ex.printStackTrace();
            }
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]return[/size][/font][/color][color=black][font=Arial][size=10.5pt];
        }
    }
    [/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]/**
      *  [/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]取得[/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]IndexWriter
      *  @param  flag  [/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]是否新建索引[/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]
      *  @return  IndexWriter
      */[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]private[/size][/font][/color][color=black][font=Arial][size=10.5pt]  IndexWriter  getWriter([/size][/font][/color][color=blue][font=Arial][size=10.5pt]boolean[/size][/font][/color][color=black][font=Arial][size=10.5pt]  flag)  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]throws[/size][/font][/color][color=black][font=Arial][size=10.5pt]  IOException  {
        String  s  =  indexPath;
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]if[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (s  ==  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt])  {
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]throw[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  IOException("[/size][/font][/color][color=black][font=宋体][size=10.5pt]索引文件路径设置错误[/size][/font][/color][color=black][font=Arial][size=10.5pt].");
        }
        indexPath  =  s  +  File.separator  +  "search";
        IndexWriter  indexwriter  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt];
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]if[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (flag)  {
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]try[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
                indexwriter  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  IndexWriter(indexPath,  analyzer,  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]true[/size][/font][/color][color=black][font=Arial][size=10.5pt]);
            }
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]catch[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (Exception  exception)  {
                System.err.println("ERROR:  Failed  to  create  a  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  index  writer.");
                exception.printStackTrace();
            }
        }
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]else[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]if[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (indexExists(indexPath))  {
                [/size][/font][/color][color=blue][font=Arial][size=10.5pt]try[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
                    indexwriter  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  IndexWriter(indexPath,  analyzer,  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]false[/size][/font][/color][color=black][font=Arial][size=10.5pt]);
                }
                [/size][/font][/color][color=blue][font=Arial][size=10.5pt]catch[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (Exception  exception1)  {
                    System.err.println("ERROR:  Failed  to  open  an  index  writer.");
                    exception1.printStackTrace();
                }
            }
            [/size][/font][/color][color=blue][font=Arial][size=10.5pt]else[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
                [/size][/font][/color][color=blue][font=Arial][size=10.5pt]try[/size][/font][/color][color=black][font=Arial][size=10.5pt]  {
                    indexwriter  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  IndexWriter(indexPath,  analyzer,  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]true[/size][/font][/color][color=black][font=Arial][size=10.5pt]);
                }
                [/size][/font][/color][color=blue][font=Arial][size=10.5pt]catch[/size][/font][/color][color=black][font=Arial][size=10.5pt]  (Exception  exception2)  {
                    System.err.println("ERROR:  Failed  to  create  a  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  index  writer.");
                    exception2.printStackTrace();
                }
            }
        }
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]return[/size][/font][/color][color=black][font=Arial][size=10.5pt]  indexwriter;
    }

    [/size][/font][/color][color=blue][font=Arial][size=10.5pt]public[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]static[/size][/font][/color]
[color=blue][font=Arial][size=10.5pt]void[/size][/font][/color][color=black][font=Arial][size=10.5pt]  main(String[]  args)  {
        String  lastUpdate  =  "/home/lucenetest/lastUpdate.txt";
        SearchIndexer  searchIndexer  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  SearchIndexer("/home/lucenetest/index");
        [/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]//[/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]取出上次更新时间[/size][/font][/color]
[color=black][font=Arial][size=10.5pt]        String  str  =  Util.readTxtFile(lastUpdate);
        [/size][/font][/color][color=blue][font=Arial][size=10.5pt]if[/size][/font][/color][color=black][font=Arial][size=10.5pt](str==[/size][/font][/color][color=blue][font=Arial][size=10.5pt]null[/size][/font][/color][color=black][font=Arial][size=10.5pt]  ||  str.length()==0){
            str  =  [/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  java.util.Date().toString();
        }
        searchIndexer.updateIndex(str);
        [/size][/font][/color][color=#00aa00][font=Arial][size=10.5pt]//[/size][/font][/color][color=#00aa00][font=宋体][size=10.5pt]写入当前时间[/size][/font][/color]
[color=black][font=Arial][size=10.5pt]        Util.writeTxtFile(lastUpdate,[/size][/font][/color][color=blue][font=Arial][size=10.5pt]new[/size][/font][/color][color=black][font=Arial][size=10.5pt]  java.util.Date(),[/size][/font][/color][color=blue][font=Arial][size=10.5pt]false[/size][/font][/color][color=black][font=Arial][size=10.5pt]);
    }
}[/size][/font][/color][/align][/align][align=left][align=left][color=black][font=宋体][size=10.5pt]写个[/size][/font][/color][color=black][font=Arial][size=10.5pt]cmd[/size][/font][/color][color=black][font=宋体][size=10.5pt]或者[/size][/font][/color][color=black][font=Arial][size=10.5pt]sh[/size][/font][/color][color=black][font=宋体][size=10.5pt]在相应操作系统下面定时执行[/size][/font][/color][color=black][font=Arial][size=10.5pt]SearchIndexer[/size][/font][/color][color=black][font=宋体][size=10.5pt]就可以了。[/size][/font][/color][color=black][font=Arial][size=10.5pt][/size][/font][/color][/align][/align]

optimistic 2007-10-1 11:01

:\ :\ :\ :\ budong

optimistic 2007-10-1 11:02

可以直接执行:lol:

wufx05 2007-11-4 13:01

我不会 我不大懂
JAVA难不
我们就会个C后就开始学数据结构
页: [1]
查看完整版本: 为自己的系统搞个全文搜索