Lucene Study(1)

lucene简介

    lucene在jakarta项目中的发布主页:http://jakarta.apache.org/lucene/docs/index.html。以下主要针对windows用户,其它用户请在上面的地址中查找相关下载。

    lucene的.jar包的下载(包括.jar和一个范例demo):
http://apache.oregonstate.edu/jakarta/lucene/binaries/lucene-1.4-final.zip

    lucene的源代码下载:
http://www.signal42.com/mirrors/apache/jakarta/lucene/source/lucene-1.4-final-src.zip

    lucene的api地址:http://jakarta.apache.org/lucene/docs/api/index.html


    本文使用lucene版本:lucene-1.4.3

  1.lucene原理:

     lucene的检索算法属于索引检索,即用空间来换取时间,对需要检索的文件、字符流进行全文索引,在检索的时候对索引进行快速的检索,得到检索位置,这个位置记录检索词出现的文件路径或者某个关键词。
    在使用数据库的项目中,不使用数据库进行检索的原因主要是:数据库在非精确查询的时候使用查询语言“like %keyword%”,对数据库进行查询是对所有记录遍历,并对字段进行“%keyword%”匹配,在数据库的数据庞大以及某个字段存储的数据量庞大的时候,这种遍历是致命的,它需要对所有的记录进行匹配查询。因此,lucene主要适用于文档集的全文检索,以及海量数据库的模糊检索,特别是对数据库的xml或者大数据的字符类型。

2.例子使用

     lucene有两个jar包一个是lucene-1.4.3.jar 一个是lucene-demos-1.4.3.jar
     将其加在classpath上就可以了。
     可以通过demo对文件进行全文索引。
   
     输入命令“java org.apache.lucene.demo.IndexFiles {full-path-to-lucene}/src”,后面的路径为所要进行索引的文件夹,例如:“java org.apache.lucene.demo.IndexFiles c:/test”即可将test包里所有的文本进
行全文索引。

    接着对索引进行检索,敲入“java org.apache.lucene.demo.SearchFiles”,在提示“Query:”后输入检索词,程序将进行检索列出检索得到的结果(检索词出现的文件路径)非常方便。

   查看例子的源代码IndexFiles的主要执行的是下面的语句:
    
     Date start = new Date();
     try
     {
      //建立一个IndexWriter,索引保存目录为“index”
      IndexWriter writer = new IndexWriter("index",new  StandardAnalyzer(), true);
      indexDocs(writer, new File(args[0])); //遍历输入的路径下的所有的 将文档写入索引
      writer.optimize();
      writer.close();
      Date end = new Date();
      System.out.print(end.getTime() - start.getTime());
      System.out.println(" total milliseconds");
    }
     catch (IOException e)
    {
      System.out.println(" caught a " + e.getClass() +
       "/n with message: " + e.getMessage());
    }
   SearchFiles类主要实现了一下的内容:

      Searcher searcher = new IndexSearcher("index");
      Analyzer analyzer = new StandardAnalyzer();
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      System.out.print("Query: ");
      String line = in.readLine();
      if (line.length() == -1)
         break;
     
      Query query = QueryParser.parse(line, "contents", analyzer);
      System.out.println("Searching for: " + query.toString               ("contents"));
      //查询的结果为hits对象,通过调用它对结果集进行操作。。。
      Hits hits = searcher.search(query);
      System.out.println(hits.length() + " total matching               documents");
     …………


     运行LuceneWeb例子
     首先部署luceneweb应用到jsp容器中。
     其次建立lucene的索引文件。
       格式为:IndexHTML  [-create]  [-index <index>] <root_directory>
       参数含义:[-create] 表示重新建立索引文件(第一次,该参数必须)
                 [-index <index>] 索引文件存放位置(任意)         
                 <root_directory> 用于创建索引文件的源文件位置(相对路径)
        注:1)只对.html .htm .txt文件作为数据源进行索引文件的创建
                2)因为该例子是web应用,所以设置<root_directory>路径时应注意,CMD下的相对路径和web应用下search.jsp的相对路径要相同。就必须在cmd下进入该search.jsp所在目录执行IndexHTML.
            cd luceneweb          
           java org.apache.lucene.demo.IndexHTML -create -index d:/lucenedb ../examples 
       第三:修改configuration.jsp文件中索引文件存放目录String indexLocation = "d:/lucenedb";
       第四:如果搜索关键字为中文,还需修改results.jsp中获取表单的参数语句。进行编码转换。将queryString =request.getParameter("query"); 替换为
           queryString = new String(request.getParameter("query").getBytes("iso8859-1"));
       第五步:http://localhost:8080/luceneweb/执行搜索就可以了

http://localhost:8080/luceneweb/ 执行搜索就可以了

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值