`
jveqi
  • 浏览: 312668 次
  • 性别: 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实例(包括分页、中文检索等)

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

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

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

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

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

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 淘淘商城源代码.zip │ ├─01.第一天 │ 01.课程计划.avi │ 02.淘淘商城介绍.avi │ 03.创建后台工程-taotao-parent.avi │ 04.创建taotao-manager.avi │ 05.svn的使用.avi │ 06.ssm框架整合思路.avi │ 07....

    java开源包8

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包10

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包1

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包11

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包2

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包3

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包6

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包5

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包4

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包7

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包9

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包101

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    Java资源包01

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

Global site tag (gtag.js) - Google Analytics