`
myclover
  • 浏览: 195078 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

基于Lucene的QueryParser搜索

阅读更多
[color=blue]

import java.io.*;
import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;


public class QueryParserTest {

 Date startTime,endTime;
 
 /**
  * 索引文件的存放位置
  */
 private String path = "C:/lucene/test.txt";
 
 /**
  * 创建索引
  */
 public void createIndexByFile(){
  IndexWriter writer;
  try {
   
   String filePath = "C:/lucene/test.txt";
   String content = file2String(filePath, "GBK");
   
   //System.out.println(content);
   
   writer = new IndexWriter(path,new StandardAnalyzer(),true);
   
   Document docA = new Document();
   
   Field fieldA = new Field("content",content,Field.Store.YES,Field.Index.TOKENIZED);
   docA.add(new Field("path",filePath,Field.Store.YES,Field.Index.UN_TOKENIZED));
   docA.add(fieldA);
   
   writer.addDocument(docA);
   
   //如果对海量数据进行创建索引的时候,需要对索引进行优化,以便提高速度
   writer.optimize();
   
   //跟数据库类似,打开一个连接,使用完后,要关闭它
   writer.close();
   
  } catch (Exception e) {
   e.printStackTrace();
  } 
 }
 

public Query queryParser(){
  QueryParser queryParser = new QueryParser("content", new StandardAnalyzer());
  try {
   return queryParser.parse("搜索");
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
 
 public void search(){
  try {
   //相当于sql中的 select * from talbeName 
   IndexSearcher search = new IndexSearcher(path);
   
   startTime = new Date();
   //抽象的查询对象
   Query query = queryParser();
   
   //lucene在设计的时候,就参照了JDBC的很多概念
   Hits hits = search.search(query);
   for (int i = 0; i < hits.length(); i++) {
    System.out.println("id= "+hits.id(i));
    System.out.println("搜索的内容: "+hits.doc(i));
    //System.out.println(hits.score(i));
   }
   endTime = new Date();
   
   System.out.println("本次搜索用时:" + (endTime.getTime() - startTime.getTime()) + "毫秒");
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 
 
 private String file2String(String fileName,String charset) throws Exception{
  BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),charset));
  //StringBuilder ,StringBuffer
  StringBuilder builder = new StringBuilder();
  String line = null;
  while((line = reader.readLine())!=null){
   builder.append(line);
  }
  return builder.toString();
 }
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  QueryParserTest ff = new QueryParserTest();
  ff.createIndexByFile();
  
  ff.search();

 }

}

 


搜索结果如下:

id= 0
搜索的内容: Document<stored/uncompressed,indexed<path:C:/lucene/test.txt> stored/uncompressed,indexed,tokenized<content:最近在学习Lucene,学习这个东西也差不多一个月了,现在想写一些搜索的测试看看。呵呵,很想做一个属于自己的简单的搜索引擎,继续坚持学习吧!>>
本次搜索用时:138毫秒[/color]
分享到:
评论

相关推荐

    解释Lucene QueryParser.jj文件

    总的来说,QueryParser.jj是Lucene查询解析过程中的基石,它通过JavaCC生成的代码将用户的自然语言查询转换为搜索引擎能够理解的查询结构,从而实现高效的信息检索。掌握QueryParser.jj的内涵,有助于开发者更深入地...

    基于Lucene的搜索引擎的研究与应用

    文章主要研究和应用了基于Lucene的搜索引擎,其特点是利用开源网络爬虫工具抓取互联网信息,并通过Lucene的API对特定信息进行索引和搜索。下面详细介绍相关知识点。 1. Lucene基础 Lucene是由Apache软件基金会提供...

    基于LUCENE的搜索引擎的设计与实现源代码

    《基于LUCENE的搜索引擎设计与实现》 在信息技术飞速发展的今天,搜索引擎已经成为人们获取信息的重要工具。本文将深入探讨如何使用Apache LUCENE这一强大的全文搜索引擎库,设计并实现一个高效的搜索引擎。LUCENE...

    基于Lucene的搜索引擎

    **基于Lucene的搜索引擎** Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它是Java编写的一个高性能、可扩展的信息检索库,为开发者提供了构建搜索功能的基础框架。这个课程设计创建了一个简单的...

    基于lucene的桌面搜索引擎

    **基于Lucene的桌面搜索引擎** 在信息技术飞速发展的今天,数据量激增,高效的信息检索变得至关重要。桌面搜索引擎作为个人信息管理的重要工具,可以帮助用户快速、准确地定位存储在本地计算机中的文件和信息。本...

    基于lucene搜索引擎的java源码

    **基于Lucene搜索引擎的Java源码详解** Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。此Java源码包提供了一个全面的示例,展示了如何利用Lucene进行索引创建、更新(增量索引)以及搜索操作。...

    基于Lucene的搜索引擎在Struts中的应用.pdf

    ### 基于Lucene的搜索引擎在Struts中的应用 #### 概述 在现代企业级应用中,信息检索已成为不可或缺的功能,特别是全文检索技术,它以计算机数据(如文字、图像)为处理对象,实现了按照数据内容进行信息检索的...

    基于Lucene的Oracle数据库全文检索.pdf

    基于Lucene的Oracle数据库全文检索是指使用Lucene搜索引擎来实现Oracle数据库中的全文检索。Lucene是一个开源的全文搜索引擎API,提供了完整的查询引擎和索引引擎,部分文本分析引擎。通过使用Lucene,可以对Oracle...

    一个基于LUCENE搜索引擎项目例子

    **基于LUCENE的搜索引擎项目详解** Apache Lucene是一个高性能、全文本搜索库,它为开发者提供了构建全文搜索引擎所需要的基础工具。在这个项目例子中,我们将深入探讨如何利用Lucene进行索引构建、查询处理以及...

    基于Lucene的Lucene

    基于Lucene构建的文件检索系统,能够高效地索引和搜索各种文本文件。通过扩展Analyzer和文件解析能力,可以轻松支持更多文件格式,满足不同场景的需求。在实际应用中,还需要考虑性能优化、并发处理、增量索引和实时...

    基于lucene 的简单搜索引擎.rar

    **基于Lucene的简单搜索引擎构建详解** Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索库,提供了一个强大的信息检索引擎框架。这个压缩包“基于lucene 的简单搜索引擎.rar”很可能是为了...

    基于Lucene3.6进行全文检索的小案例

    现在,让我们逐步构建一个基于Lucene 3.6的全文检索系统: 1. **创建索引**:首先,我们需要创建一个索引writer,然后遍历要索引的文档,将每个文档的字段添加到writer中。索引完成后,记得关闭writer。 2. **分析...

    基于Lucene的Web站内信息搜索系统

    **基于Lucene的Web站内信息搜索系统** 在互联网时代,搜索引擎已经成为用户获取信息的关键工具。对于企业或个人网站来说,拥有一个高效、精准的站内搜索系统是提供良好用户体验的重要组成部分。Apache Lucene就是...

    基于Lucene的搜索系统-客户端调用

    在构建一个基于Lucene的搜索系统时,客户端调用是实现用户交互的关键环节。Lucene是一个高性能、全文检索库,它提供了丰富的API供开发者使用,能够帮助我们建立强大的搜索引擎。而在这个系统中,同时采用了Paoding这...

Global site tag (gtag.js) - Google Analytics