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条记录:
相关推荐
4.多线程并发搜索,通过contiperf测试,详见:contiperf_百度百科 5.分页搜索 注意:lucene4.10.0需要jdk1.7以上版本,1.6版本以下明确不再支持。lucene支持多线程并发搜索和建索引,只要IndexWriter是单例模式即可
lucene测试代码.txt lucene为数据库搜索建立增量索引.txt lucene数据库索引.txt 新闻系统全文检索的思绪.txt lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt ...
- "sample.dw.paper.lucene1.0"可能是项目或示例代码的目录,包含了Lucene的实现代码和可能的测试数据。在这个目录下,你可能会找到源码文件(如.java)、配置文件(如.xml)以及测试数据。 通过这个入门程序,你...
"luceneTest"这个文件可能是DEMO的主程序或测试代码,包含创建索引和执行搜索的示例。在学习这个DEMO时,重点应放在理解如何配置Analyzer,如何创建和管理IndexWriter,如何解析和执行查询,以及如何处理搜索结果。 ...
环境搭建完成后,你可以编写测试代码。这里提供了一个简单的例子,包括一个`DataFactory`类,用于模拟存储药品信息,以及一个`LuceneIKUtil`类,用于实现Lucene索引和搜索功能。`DataFactory`包含了一个`List...
博客链接指向了ITEYE上的一篇文章,虽然具体内容未给出,但可以推测作者分享了一个入门级别的教程或代码示例,帮助初学者理解如何在实际项目中使用Lucene。 标签 "源码 工具" 指出我们将关注Lucene的源代码和它作为...
`LuceneDemoSrc`可能是包含一个Lucene入门示例项目的压缩文件,它可能包括以下部分: 1. **源码**:展示了如何创建和使用Lucene索引,以及如何执行搜索。 2. **配置文件**:可能包含Analyzer的配置,用于定制化分词...
- `LuceneTest`可能是这个项目的主要测试类,它可能包含创建索引、查询索引以及展示结果的代码示例。 - 学习该项目,应关注如何实例化`Directory`(如`FSDirectory`)、选择合适的`Analyzer`(如`StandardAnalyzer...
《Lucene基础入门详解》 Lucene,作为Apache软件基金会的一个开源全文检索库,是Java开发者最常使用的全文搜索引擎工具。它提供了高级的文本检索功能,使得开发者能够快速地在大量数据中构建高效的搜索功能。本文将...
lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...
【标题】:“Cassandra入门项目源代码”是一个针对初学者的教程项目,旨在帮助开发者了解如何在Eclipse环境中使用Spring Data框架与EasyRest风格来操作Cassandra数据库和Lucene搜索引擎。这个项目提供了一整套实践性...
7. **test**:测试代码,包括单元测试和集成测试,对于理解代码逻辑和确保代码质量非常有帮助。 深入学习Lucene 3.4.0源码,可以让你对搜索引擎的工作原理有更深刻的理解,包括倒排索引的构建、查询优化、相关性...
这个"lucene-starter"项目看起来是一个入门资源,旨在帮助开发者快速上手并理解如何在自己的应用中使用Lucene。 在Lucene中,主要涉及以下几个核心概念和组件: 1. **索引**:Lucene首先需要对文档进行索引,这个...
它基于Lucene库,提供了更易用的API和配置方式,使得开发者可以快速搭建搜索引擎。 华为FusionInsight 是华为提供的大数据分析平台,集成了包括Solr在内的多种组件,为企业提供了一站式的大数据解决方案。其中,...
5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
**入门指南** 对于初学者来说,理解Compass的基本概念和用法是关键。首先,你需要配置Compass,指定数据源和索引位置。接着,定义对象-搜索映射文件(`.cmap.xml`),将你的Java类与Lucene字段对应起来。然后,你...
这个测试可能包括创建索引、查询、分页搜索等一系列操作,帮助初学者逐步理解和掌握Lucene的使用方法。 总结,Lucene 3.6.1是一个强大的全文搜索引擎,结合庖丁解牛分词器,能够高效地处理中文文本。通过为数据库表...
1. 教学辅助:对于初学者,LuceneTest是一个理想的入门工具,通过实际操作可以快速理解Lucene的工作流程。 2. 开发调试:在开发过程中,LuceneTest可以帮助开发者快速验证代码,定位问题,提升开发效率。 3. 性能...
14. **集成测试**:学习编写测试用例,确保 Elasticsearch 相关代码的正确性。 **四、实战项目** 本教程还包含一个实战项目,涵盖了从数据采集、清洗、存储到查询展示的全过程。这个项目将帮助读者将理论知识应用...