Lucene入门
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
以下模拟一个简单的Lucene入门案例
接下来为Lucene开发步骤:
1、新建一个java工程,导入Lucene所需jar,如下图
目录结构
其中:luceneds为数据源存储位置,luceneindex存放索引文件的位置,即索引库。如果索引库已被创建,那么luceneindex目录下会有索引文件,如下图:
代码
package com.ljq.lucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
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.NumberTools;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.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.junit.Test;
/**
* 开发lucene步骤:先创建索引,再搜索
*
* @author jiqinlin
*
*/
publicclass HelloWorld {
// 数据源路径
String dspath ="F:\\android\\luceneprj\\luceneds\\IndexWriter addDocument's a javadoc .txt";
//存放索引文件的位置,即索引库
String indexpath ="F:\\android\\luceneprj\\luceneindex";
//分词器
Analyzer analyzer =new StandardAnalyzer();
/**
* 创建索引
*
* IndexWriter 用来操作(增、删、改)索引库的
*/
@Test
publicvoid createIndex() throws Exception {
File file =new File(dspath);
//Document存放经过组织后的数据源,只有转换为Document对象才可以被索引和搜索到
Document doc =new Document();
//文件名称
doc.add(new Field("name", file.getName(), Store.YES, Index.ANALYZED));
//检索到的内容
doc.add(new Field("content", readFileContent(file), Store.YES, Index.ANALYZED));
//文件大小
doc.add(new Field("size", NumberTools.longToString(file.length()),
Store.YES, Index.NOT_ANALYZED));
//检索到的文件位置
doc.add(new Field("path", file.getAbsolutePath(), Store.YES, Index.NOT_ANALYZED));
// 建立索引
IndexWriter indexWriter =new IndexWriter(indexpath, analyzer, true,
MaxFieldLength.LIMITED);
indexWriter.addDocument(doc);
indexWriter.close();
}
/**
* 搜索
*
* IndexSearcher 用来在索引库中进行查询
*/
@Test
publicvoid search() throws Exception {
//请求字段
//String queryString = "document";
String queryString ="adddocument";
// 1,把要搜索的文本解析为 Query
String[] fields = { "name", "content" };
QueryParser queryParser =new MultiFieldQueryParser(fields, analyzer);
Query query = queryParser.parse(queryString);
// 2,进行查询,从索引库中查找
IndexSearcher indexSearcher =new IndexSearcher(indexpath);
Filter filter =null;
TopDocs topDocs = indexSearcher.search(query, filter, 10000);
System.out.println("总共有【"+ topDocs.totalHits +"】条匹配结果");
// 3,打印结果
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
// 文档内部编号
int index = scoreDoc.doc;
// 根据编号取出相应的文档
Document doc = indexSearcher.doc(index);
System.out.println("------------------------------");
System.out.println("name = "+ doc.get("name"));
System.out.println("content = "+ doc.get("content"));
System.out.println("size = "+ NumberTools.stringToLong(doc.get("size")));
System.out.println("path = "+ doc.get("path"));
}
}
/**
* 读取文件内容
*/
publicstatic String readFileContent(File file) {
try {
BufferedReader reader =new BufferedReader(new InputStreamReader(new FileInputStream(file)));
StringBuffer content =new StringBuffer();
for (String line =null; (line = reader.readLine()) !=null;) {
content.append(line).append("\n");
}
reader.close();
return content.toString();
} catch (Exception e) {
thrownew RuntimeException(e);
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
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.NumberTools;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.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.junit.Test;
/**
* 开发lucene步骤:先创建索引,再搜索
*
* @author jiqinlin
*
*/
publicclass HelloWorld {
// 数据源路径
String dspath ="F:\\android\\luceneprj\\luceneds\\IndexWriter addDocument's a javadoc .txt";
//存放索引文件的位置,即索引库
String indexpath ="F:\\android\\luceneprj\\luceneindex";
//分词器
Analyzer analyzer =new StandardAnalyzer();
/**
* 创建索引
*
* IndexWriter 用来操作(增、删、改)索引库的
*/
@Test
publicvoid createIndex() throws Exception {
File file =new File(dspath);
//Document存放经过组织后的数据源,只有转换为Document对象才可以被索引和搜索到
Document doc =new Document();
//文件名称
doc.add(new Field("name", file.getName(), Store.YES, Index.ANALYZED));
//检索到的内容
doc.add(new Field("content", readFileContent(file), Store.YES, Index.ANALYZED));
//文件大小
doc.add(new Field("size", NumberTools.longToString(file.length()),
Store.YES, Index.NOT_ANALYZED));
//检索到的文件位置
doc.add(new Field("path", file.getAbsolutePath(), Store.YES, Index.NOT_ANALYZED));
// 建立索引
IndexWriter indexWriter =new IndexWriter(indexpath, analyzer, true,
MaxFieldLength.LIMITED);
indexWriter.addDocument(doc);
indexWriter.close();
}
/**
* 搜索
*
* IndexSearcher 用来在索引库中进行查询
*/
@Test
publicvoid search() throws Exception {
//请求字段
//String queryString = "document";
String queryString ="adddocument";
// 1,把要搜索的文本解析为 Query
String[] fields = { "name", "content" };
QueryParser queryParser =new MultiFieldQueryParser(fields, analyzer);
Query query = queryParser.parse(queryString);
// 2,进行查询,从索引库中查找
IndexSearcher indexSearcher =new IndexSearcher(indexpath);
Filter filter =null;
TopDocs topDocs = indexSearcher.search(query, filter, 10000);
System.out.println("总共有【"+ topDocs.totalHits +"】条匹配结果");
// 3,打印结果
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
// 文档内部编号
int index = scoreDoc.doc;
// 根据编号取出相应的文档
Document doc = indexSearcher.doc(index);
System.out.println("------------------------------");
System.out.println("name = "+ doc.get("name"));
System.out.println("content = "+ doc.get("content"));
System.out.println("size = "+ NumberTools.stringToLong(doc.get("size")));
System.out.println("path = "+ doc.get("path"));
}
}
/**
* 读取文件内容
*/
publicstatic String readFileContent(File file) {
try {
BufferedReader reader =new BufferedReader(new InputStreamReader(new FileInputStream(file)));
StringBuffer content =new StringBuffer();
for (String line =null; (line = reader.readLine()) !=null;) {
content.append(line).append("\n");
}
reader.close();
return content.toString();
} catch (Exception e) {
thrownew RuntimeException(e);
}
}
}
运行结果如下:
分类: Lucene
相关推荐
Lucene入门与使用,非常简单,适合入门
`lucene入门小实例.txt` 文件中可能包含了一个简单的Lucene使用示例,例如: 1. 创建 `Directory` 对象,比如使用 `FSDirectory.open()` 打开一个文件系统的目录来存储索引。 2. 实例化 `Analyzer`,如使用 `...
这个“lucene入门小例子”很可能是为了帮助初学者理解并掌握Lucene的基本用法而设计的一系列示例代码。 Lucene的核心概念包括索引、文档、字段和查询。首先,你需要理解索引的概念,它类似于传统数据库中的索引,但...
以上是Lucene入门的基本知识和关键概念,通过深入学习和实践,你可以掌握如何利用Lucene构建强大的全文搜索引擎。记住,实践中遇到的问题往往是最好的学习资源,不断尝试和解决,你将逐渐成为Lucene的专家。
**Lucene入门学习文档** **一、什么是Lucene** Lucene是Apache软件基金会下的一个开源全文检索库,它提供了一个高性能、可扩展的信息检索服务。Lucene最初由Doug Cutting开发,现在已经成为Java社区中事实上的标准...
【Lucene】Lucene入门心得 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个简单的API,使得开发者可以方便地在自己的应用程序中集成全文检索功能。...
**全文搜索引擎Lucene入门** 全文搜索引擎Lucene是Apache软件基金会的一个开放源代码项目,它为Java开发者提供了一个高性能、可扩展的信息检索库。Lucene以其强大的文本搜索功能和高效的索引能力,在各种需要全文...
### Lucene 入门基础教程知识点详解 #### 一、Lucene简介 - **定义**:Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成,属于Apache项目的一部分。 - **适用场景**:适合于任何需要进行全文检索的应用...
在这个经典Lucene入门模块中,我们将深入理解如何使用Lucene进行索引创建和搜索操作。 首先,我们来看Lucene如何建立数据的索引。这通常涉及以下几个步骤: 1. **索引创建**:使用 `IndexWriter` 对象来创建或更新...
这个“Lucene入门demo”将帮助我们理解如何使用 Lucene 进行基本的索引和搜索操作。 **一、Lucene 的核心概念** 1. **索引(Indexing)**: 在 Lucene 中,索引是文档内容的预处理结果,类似于数据库中的索引。通过...
lucene入门相关知识,包括基本介绍、简单示例、核心API介绍。
**Lucene 入门指南** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它是 Java 开发人员用来构建搜索引擎应用程序的基础工具。本指南将帮助初学者理解 Lucene 的核心概念,以及如何利用它来...
【Lucene 入门体会】 Lucene 是一个强大的全文检索工具包,主要由 Java 编写,它提供了索引和搜索功能,使得开发者能够轻松地为应用程序添加高级搜索能力。作为Apache Jakarta家族的一员,Lucene 开源且免费,被...
### Lucene入门指南 #### 一、Lucene简介 **Lucene** 是一款高性能的全文检索引擎工具包,由 **Apache 软件基金会** 的 **Jakarta 项目组** 开发并维护。作为一款完全开放源代码的工具,Lucene 提供了一系列的功能...
【Lucene入门知识详解】 Lucene是一个基于Java的全文索引引擎工具包,它并不是一个完整的全文搜索引擎,而是提供了一套构建搜索引擎的基础组件。Lucene的主要目标是方便开发者将其集成到各类应用程序中,以实现高效...