`
jveqi
  • 浏览: 321795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene 入门(代码已经过测试)

 
阅读更多

1、所需jar


    lucene-analyzers-common-4.7.0.jar
    lucene-core-4.7.0.jar
    lucene-queries-4.7.0.jar
    lucene-queryparser-4.7.0.jar

 

2、代码  已测试。

     将测试表的数据假如索引,然后进行搜索查询

 

package com.jh.lencene;

import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.util.Date;
import java.util.List;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.document.Field.TermVector;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.jh.pojo.User;

public class HelloLucene {
 public static void main(String[] args) throws IOException, ParseException {
  /*Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
  // Store the index in memory:
  Directory directory = new RAMDirectory();
  // To store an index on disk, use this instead:
  // Directory directory = FSDirectory.open(new File("H:/luceneIndex"));
  IndexWriterConfig config = new IndexWriterConfig(
    Version.LUCENE_CURRENT, analyzer);
  IndexWriter iwriter = new IndexWriter(directory, config);
  Document doc = new Document();
  String text = "This is the text to be indexed.";
  doc.add(new Field("fieldname", text, TextField.TYPE_STORED));
  iwriter.addDocument(doc);
  iwriter.close();
  System.out.println("建立索引 ok");

  // Now search the index:
  DirectoryReader ireader = DirectoryReader.open(directory);
  IndexSearcher isearcher = new IndexSearcher(ireader);
  // Parse a simple query that searches for "text":
  QueryParser parser = new QueryParser(Version.LUCENE_CURRENT,
    "fieldname", analyzer);
  Query query = parser.parse("text");
  ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
  System.out.println(hits.length == 1);
  // Iterate through the results:
  for (int i = 0; i < hits.length; i++) {
   Document hitDoc = isearcher.doc(hits[i].doc);
   System.out.println(hitDoc.get("fieldname"));
  }
  ireader.close();
  directory.close();*/

  try {
   //new HelloLucene().createSearch();
   //new HelloLucene().searchKeyword("xx");

   new HelloLucene().search("a*");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }


 /**
  * 创建索引
  */
 public String createSearch() throws Exception {
  System.out.println("开始创建索引。。。");
  long stime = new Date().getTime();
  Directory dir = FSDirectory.open(new File("E:\\test"));
  Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
  IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,
    analyzer);
  iwc.setOpenMode(OpenMode.CREATE); //即创建新索引文件OpenMode.CREATE_OR_APPEND表示创建或追加到已有索引文件
  IndexWriter writer = new IndexWriter(dir, iwc);

  SessionFactory sessionFactory = new Configuration().configure()
    .buildSessionFactory();
  Session session = sessionFactory.openSession();

  //需要建立 索引的数据
  List<User> users = session.createSQLQuery(" select * from user2")
    .addEntity(User.class).list();

  for (User u : users) {
   Document doc = new Document();
   System.out.println(u.getName());
   // int 要转换 String
   doc.add(new Field("id", String.valueOf(u.getId()), Field.Store.YES,
     Field.Index.ANALYZED));
   doc.add(new Field("name", u.getName(), Field.Store.YES,
     Field.Index.ANALYZED));

   writer.addDocument(doc);
  }
  writer.forceMerge(1);
  writer.close();
  long endTime = new Date().getTime();
  System.out.println("这花费了 " + (endTime - stime) + "毫秒来把数据增加到索引里面去!");
  return "succ";
 }

 public void search(String queryStr) throws Exception {
  long startTime = new Date().getTime();
  String[] fields = { "name", "content" };//第一个字段用来指定索引的字段
  Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);
  QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_47,
    fields, analyzer);
  Query query = null;
  Filter filter = null;
  query = queryParser.parse(queryStr);
  IndexReader reader = IndexReader.open(FSDirectory.open(new File(
    "E:\\test")));
  IndexSearcher indexSearcher = new IndexSearcher(reader);
  IndexSearcher searcher = new IndexSearcher(reader);
  TopDocs topDocs = indexSearcher.search(query, filter, 1000);

  ScoreDoc[] hits = topDocs.scoreDocs;

  System.out.println("hits.length = " + hits.length);


  Document doc = null;
  for (ScoreDoc scorceDoc : hits) {
   doc = searcher.doc(scorceDoc.doc);
   System.out.println(queryStr + " = key .... " + doc.get("id") + "=id  ...  name = " + doc.get("name"));
  }
  System.out.println("总共有" + topDocs.totalHits + "条记录:");
  /* for (ScoreDoc scoreDoc : topDocs.scoreDocs) { 
       int docNum = scoreDoc.doc; 
       Document doc = indexSearcher.doc(docNum); 
       File2DocumentUtil.printDocumentInfo(doc); 
   } */
 }
}

 

 

测试结果:

hits.length = 5
a* = key .... 00002=id  ...  name = admin2
a* = key .... bfe7fa941c8841ec8ede01d3f1adbe79=id  ...  name = ass
a* = key .... 0d6c96db117e4039a00df646b8323112=id  ...  name = ass2
a* = key .... e719297fdb364735b6e1fd4f55723ead=id  ...  name = aaaa
a* = key .... 00001=id  ...  name = admin1
总共有5条记录:

分享到:
评论

相关推荐

    apache lucene 4.10.0入门单元测试代码demo

    4.多线程并发搜索,通过contiperf测试,详见:contiperf_百度百科 5.分页搜索 注意:lucene4.10.0需要jdk1.7以上版本,1.6版本以下明确不再支持。lucene支持多线程并发搜索和建索引,只要IndexWriter是单例模式即可

    【大搜集:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    lucene测试代码.txt lucene为数据库搜索建立增量索引.txt lucene数据库索引.txt 新闻系统全文检索的思绪.txt lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt ...

    lucene学习入门程序

    - "sample.dw.paper.lucene1.0"可能是项目或示例代码的目录,包含了Lucene的实现代码和可能的测试数据。在这个目录下,你可能会找到源码文件(如.java)、配置文件(如.xml)以及测试数据。 通过这个入门程序,你...

    lucene3.0.0 入门DEMO

    "luceneTest"这个文件可能是DEMO的主程序或测试代码,包含创建索引和执行搜索的示例。在学习这个DEMO时,重点应放在理解如何配置Analyzer,如何创建和管理IndexWriter,如何解析和执行查询,以及如何处理搜索结果。 ...

    Lucene4.7+IK Analyzer中文分词入门教程

    环境搭建完成后,你可以编写测试代码。这里提供了一个简单的例子,包括一个`DataFactory`类,用于模拟存储药品信息,以及一个`LuceneIKUtil`类,用于实现Lucene索引和搜索功能。`DataFactory`包含了一个`List...

    第一个lucene的简单实例....

    博客链接指向了ITEYE上的一篇文章,虽然具体内容未给出,但可以推测作者分享了一个入门级别的教程或代码示例,帮助初学者理解如何在实际项目中使用Lucene。 标签 "源码 工具" 指出我们将关注Lucene的源代码和它作为...

    全文检索系统(Lucene)

    `LuceneDemoSrc`可能是包含一个Lucene入门示例项目的压缩文件,它可能包括以下部分: 1. **源码**:展示了如何创建和使用Lucene索引,以及如何执行搜索。 2. **配置文件**:可能包含Analyzer的配置,用于定制化分词...

    Lucene建立索引

    - `LuceneTest`可能是这个项目的主要测试类,它可能包含创建索引、查询索引以及展示结果的代码示例。 - 学习该项目,应关注如何实例化`Directory`(如`FSDirectory`)、选择合适的`Analyzer`(如`StandardAnalyzer...

    lucene基本使用

    《Lucene基础入门详解》 Lucene,作为Apache软件基金会的一个开源全文检索库,是Java开发者最常使用的全文搜索引擎工具。它提供了高级的文本检索功能,使得开发者能够快速地在大量数据中构建高效的搜索功能。本文将...

    lucene实例(包括分页、中文检索等)

    lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...

    cassandra入门项目源代码

    【标题】:“Cassandra入门项目源代码”是一个针对初学者的教程项目,旨在帮助开发者了解如何在Eclipse环境中使用Spring Data框架与EasyRest风格来操作Cassandra数据库和Lucene搜索引擎。这个项目提供了一整套实践性...

    lucene 3.4源码包,适用于XP,WIN7系统

    7. **test**:测试代码,包括单元测试和集成测试,对于理解代码逻辑和确保代码质量非常有帮助。 深入学习Lucene 3.4.0源码,可以让你对搜索引擎的工作原理有更深刻的理解,包括倒排索引的构建、查询优化、相关性...

    lucene-starter:该存储库包含与Apache Lucene一起使用的示例

    这个"lucene-starter"项目看起来是一个入门资源,旨在帮助开发者快速上手并理解如何在自己的应用中使用Lucene。 在Lucene中,主要涉及以下几个核心概念和组件: 1. **索引**:Lucene首先需要对文档进行索引,这个...

    solr入门java工程

    它基于Lucene库,提供了更易用的API和配置方式,使得开发者可以快速搭建搜索引擎。 华为FusionInsight 是华为提供的大数据分析平台,集成了包括Solr在内的多种组件,为企业提供了一站式的大数据解决方案。其中,...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    Compass 的java代码

    **入门指南** 对于初学者来说,理解Compass的基本概念和用法是关键。首先,你需要配置Compass,指定数据源和索引位置。接着,定义对象-搜索映射文件(`.cmap.xml`),将你的Java类与Lucene字段对应起来。然后,你...

    《ElasticSearch入门到实战》电子书,从入门到进阶实战项目的教程文档,框架SpringBoot框架整合ES.zip

    14. **集成测试**:学习编写测试用例,确保 Elasticsearch 相关代码的正确性。 **四、实战项目** 本教程还包含一个实战项目,涵盖了从数据采集、清洗、存储到查询展示的全过程。这个项目将帮助读者将理论知识应用...

    lucence3.6.1 示例完整包

    这个测试可能包括创建索引、查询、分页搜索等一系列操作,帮助初学者逐步理解和掌握Lucene的使用方法。 总结,Lucene 3.6.1是一个强大的全文搜索引擎,结合庖丁解牛分词器,能够高效地处理中文文本。通过为数据库表...

    LuceneTest 检索

    1. 教学辅助:对于初学者,LuceneTest是一个理想的入门工具,通过实际操作可以快速理解Lucene的工作流程。 2. 开发调试:在开发过程中,LuceneTest可以帮助开发者快速验证代码,定位问题,提升开发效率。 3. 性能...

Global site tag (gtag.js) - Google Analytics