您的位置:首页 > 其它

Lucene 6.10 初级 创建索引库和利用索引库进行搜索!

2017-02-18 11:50 453 查看
Lucene是一个全文检索工具包

笔者这几天刚好在学,做了一些笔记。

首先创建索引库

package per.cr.lucene;

import java.io.File;
import java.nio.file.FileSystems;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
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.Store;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

public class IndexMangers{
@Test
public void testCreatLucene() throws Exception {


//0.创建list来保存多个document
List<Document> doclist = new ArrayList<Document>();

// 1.指定文件所在路径
File files = new File("F:\\dic");

// 2.抓取此文件夹中的所有文件
for (File file : files.listFiles()) {

// 3.抓取文件名称
String fileName = file.getName();

// 4.抓取文件内容
String fileContext = FileUtils.readFileToString(file);
// 5.抓取文件大小
Long fileSize = file.length();

// 6.获取到文件全部信息后,创建文档来保存他们的信息。
Document doc = new Document();

// 7.将文本文件所有信息转化成键值对的格式
TextField nameField = new TextField("fileName", fileName, Store.YES);
TextField contextField = new TextField("fileContext", fileContext, Store.YES);
TextField sizeField = new TextField("fileSize", fileSize.toString(), Store.YES);

// 8.将转化好的对象加入文档中
doc.add(nameField);
doc.add(contextField);
doc.add(sizeField);

//9.将doc文档加入到doclist中去
doclist.add(doc);
}

//10.创建标准分词器对已转化的文档进行分词,标准分词器对英文支持好,中文只能分成一个字
Analyzer analyzer = new StandardAnalyzer();

//12.创建分词文件存放路径
FSDirectory dictionary = FSDirectory.open(FileSystems.getDefault().getPath("F:\\dir"));

//13.创建indexWrite对象的配置对象
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);

//11.创建索引和文档写对象
IndexWriter indexWriter = new IndexWriter(dictionary,indexWriterConfig);

//14.将文档加入索引对象完成对文档的索引
for(Document doc : doclist){
indexWriter.addDocument(doc);
}

//15.提交
indexWriter.commit();

//16.关闭
indexWriter.close();
}


}

建立好了索引库后可以用Luke查看索引库中的内容

接下来我们利用Lucene中的方法来进行搜索。

package per.cr.lucene;

import java.nio.file.FileSystems;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.queryparser.classic.QueryParser;
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.FSDirectory;
import org.junit.Test;

public class IndexSearch {
@Test
public void search() throws Exception {

//1.创建分词器,分词器必须与你创建索引库时所使用的分词器一致
StandardAnalyzer standardAnalyzer = new StandardAnalyzer();

//2.设置默认搜索域
//作用:如果搜索时如果没有指定域只有搜索关键词这时系统会从默认搜索域中搜索
String Defsearch = "fileContext";

//3.获取查询对象
QueryParser queryParser = new QueryParser(Defsearch, standardAnalyzer);

//4.创建查询语句
Query query = queryParser.parse("fileName:2017");

//5.指定索引库
FSDirectory dictionary = FSDirectory.open(FileSystems.getDefault().getPath("F:\\dir"));

//6.创建读取索引库对象
DirectoryReader directoryReader = DirectoryReader.open(dictionary);

//7.创建索引库搜索对象
IndexSearcher indexSearcher = new IndexSearcher(directoryReader);

//8.开始搜索
//设置结果数目限制
int resNum = 10;
TopDocs topDocs = indexSearcher.search(query, resNum);

//9.将搜索结果拆分获取结果集
ScoreDoc[] scoreDocs = topDocs.scoreDocs;

//10.打印搜索结果
for(ScoreDoc scoreDoc : scoreDocs){
//获取结果的文档编号
int docId = scoreDoc.doc;
//通过编号去获取对应文档
Document document = directoryReader.document(docId);
//打印文档内容
System.out.println("fileName: "+ document.get("fileName"));
System.out.println("fileSize: "+ document.get("fileSize"));
System.out.println("============================================");
}
}
}


结果为

fileName: localhost_access_log.2017-01-03.txt
fileSize: 12500
============================================
fileName: localhost_access_log.2017-01-04.txt
fileSize: 114411
============================================
fileName: localhost_access_log.2017-01-05.txt
fileSize: 183246
============================================
fileName: localhost_access_log.2017-01-06.txt
fileSize: 7599
============================================
fileName: localhost_access_log.2017-01-07.txt
fileSize: 318111
============================================
fileName: localhost_access_log.2017-01-08.txt
fileSize: 11173
============================================
fileName: localhost_access_log.2017-02-13.txt
fileSize: 27185


成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lucene 搜索 索引