package com.cs.multi;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.LockObtainFailedException;

import com.cs.itcast.FileToDocumentUtil;
import com.cs.tool.PrintDocumentUtil;

public class MultiDocument {

private static String dataPath = "D:\\work-tool\\workspace\\luencedemo\\datasource";

private static String indexPath = "D:\\work-tool\\workspace\\luencedemo\\directory";

private static Analyzer analyzer = new StandardAnalyzer();

public static void main(String[] args) throws Exception {

//createIndex();
//search();
}

//创建索引

private static void createIndex() throws CorruptIndexException, LockObtainFailedException, IOException, Exception {
File file = new File(dataPath);

IndexWriter indexWriter = new IndexWriter(indexPath, analyzer, true, MaxFieldLength.LIMITED);//四个参数是1:建立索引的位置,2:分词器,3:是否创建索引,4:索引的最大文档内容长度.MaxFieldLength.LIMITED表示:10000,MaxFieldLength.UNLIMITED表示无限大

if(file!=null&&file.isDirectory()){

File[] files = file.listFiles();
for (File f : files) {
Document document = FileToDocumentUtil.fileToDocument(f.getAbsolutePath());
indexWriter.addDocument(document);//添加文档索引

}
indexWriter.close();
}else{
return ;
}
}

//搜索
private static void search() throws CorruptIndexException, IOException{

IndexSearcher indexSearcher = new IndexSearcher(indexPath);  //搜索索引的位置
/*第一种 构建Query

String keyword = "MySQL";
Query query = new TermQuery(new Term("content", keyword.toLowerCase()));   //Term参数是filed字段,要查找的关键词

*/

/*第二种 构建Query

String[] fields = {"path","content","name"};

QueryParser queryParser = new MultiFieldQueryParser(fields,analyzer);//语言分析器 多字段的语言分析器  这个分词器要和创建索引的分词器一样
Query query = queryParser.parse(keyword);

*/
TopDocs topDocs = indexSearcher.search(query, null, 10000);  //查找并返回结果集

int totalHits = topDocs.totalHits; //查询出来的文档总数

System.out.println("查询出来的文档总数为:【"+totalHits+"】条记录数");

//遍历结果集
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
int doc = scoreDoc.doc;//文档编号
Document document = indexSearcher.doc(doc);//得到该编号的文档
PrintDocumentUtil.print(document);//打印文档内容
}

indexSearcher.close();
}

}

//工具类  将File转化为Document  该Document是lucene的

import java.io.File;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;

import com.cs.tool.FileToContent;

public class FileToDocumentUtil {

public static Document fileToDocument(String path) throws Exception{
File file = new File(path);

Document doc = new Document();
//后面两个属性是建立索引和分词
doc.add(new Field("name",file.getName(),Store.YES,Index.ANALYZED));
doc.add(new Field("path",file.getCanonicalPath(),Store.YES,Index.NOT_ANALYZED));
doc.add(new Field("content",FileToContent.fileToContent(file),Store.YES,Index.ANALYZED));
doc.add(new Field("length",file.length()+"",Store.YES,Index.NO));

return doc;
}
}

package com.cs.tool;

import org.apache.lucene.document.Document;

public class PrintDocumentUtil {

//打印文档内容
public static void print(Document doc){
System.out.println("文档路径为"+doc.get("path"));//该Document记录下的字段
System.out.println("文档名称为"+doc.get("name"));
System.out.println("文档内容为"+doc.get("content"));
System.out.println("文档长度为"+doc.get("length"));
}
}

lucene索引的创建与搜索的更多相关文章

  1. Lucene索引库维护、搜索、中文分词器

    删除索引(文档) 需求 某些图书不再出版销售了,我们需要从索引库中移除该图书. 1 @Test 2 public void deleteIndex() throws Exception { 3 // ...

  2. Lucene——索引的创建、删除、修改

    package cn.tz.lucene; import java.io.File; import java.util.ArrayList; import java.util.List; import ...

  3. *lucene索引_创建_域选项

    [索引建立步骤] [创建Directory] [创建writer] [创建文档并添加索引] 文档和域的概念很重要 文档相当于表中的每一条记录,域相当于表中的每一个字段. [查询索引的基本信息] 使用I ...

  4. Apache Lucene(全文检索引擎)—创建索引

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...

  5. JAVAEE——Lucene基础:什么是全文检索、Lucene实现全文检索的流程、配置开发环境、索引库创建与管理

    1. 学习计划 第一天:Lucene的基础知识 1.案例分析:什么是全文检索,如何实现全文检索 2.Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3.配置开发环境 4.创建索引库 5 ...

  6. Lucene 4.7 --创建索引

    Lucene的最新版本和以前的语法或者类名,类规定都相差甚远 0.准备工作: 1). Lucene官方API http://lucene.apache.org/core/4_7_0/index.htm ...

  7. Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索

    Lucene 的四大索引查询  清单1:使用布尔操作符 Java代码      //Test boolean operator blic void testOperator(String indexD ...

  8. 42、lucene和机器学习进行全文搜索,并排序

    package com.lucene.test; import java.io.BufferedInputStream; import java.io.File; import java.io.Fil ...

  9. paip.lucene 4.3 中文语义搜索最佳实践

    paip.lucene 4.3 中文语义搜索最佳实践 首先一个问题是要不要使用lucene 自带的分词器...我觉得最好不使用哪自带的分词器.效果还凑火,就是不好控制... 先使用ik,ict,mms ...

随机推荐

  1. char、varchar、varchar(2)的区别

    char是存储字节是一定的,例如char(10),存储内容为"java",那么实际存储的是"java      ",后面是6个空字符.按字节存储: varcha ...

  2. bitcode 关于讯飞

    在真机调试的时候一直报 ld: '/Users/Chenglijuan/Documents/语音识别/lib/iflyMSC.framework/iflyMSC(IFlyRecognizerView. ...

  3. python中的二维数组90度旋转

    data=[[col for col in range(4)] for raw in range(4)] #创建一个二维数组 for n in data: print (n) print('\n') ...

  4. 视频编辑SDK---我们只提供API,任你自由设计炫酷的功能

    面对相对复杂的视频编辑处理技术,你是否束手无策? 在短视频应用中,有一定技术难度的视频编辑技术中,我们提出了一种全新的解决方法:画板和画笔.短视频处理,用画板和画笔,就够了! 我们设计了极其简单易懂的 ...

  5. Xsser

    来源:https://www.cqhacker.cn/post-174.html   XSSer使用说明 =============================================== ...

  6. 《css揭秘》

    <css揭秘> 第一章:引言 引言 案例们 第二章:背景与边框 背景和边框 半透明边框(rgba/hsla.background-clip) 多重边框(box-shadow) 灵活的背景定 ...

  7. hadoop,yarn和vcpu资源配置

    Hadoop  YARN同时支持内存和CPU两种资源的调度(默认只支持内存,如果想进一步调度CPU,需要自己进行一些配置),本文将介绍YARN是如何对这些资源进行调度和隔离的. 在YARN中,资源管理 ...

  8. python字符串及正则表达式[转]

    原文链接:http://www.cnblogs.com/guojidong/archive/2012/12/20/2826388.html 字符串: 正则表达式 正则表达式元字符与语法图: 注意事项: ...

  9. 特性(Attributes)

    用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体相关联后,即可在运行时用反射技术查询特性. 例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该 ...

  10. django 安装记录

    1. 下载django安装包,下载个最新的安装包即可. https://www.djangoproject.com/download/ 2. 在本地解压   tar -xvf  安装包名称 3. 安装 ...