lucene索引的创建与搜索
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索引的创建与搜索的更多相关文章
- Lucene索引库维护、搜索、中文分词器
删除索引(文档) 需求 某些图书不再出版销售了,我们需要从索引库中移除该图书. 1 @Test 2 public void deleteIndex() throws Exception { 3 // ...
- Lucene——索引的创建、删除、修改
package cn.tz.lucene; import java.io.File; import java.util.ArrayList; import java.util.List; import ...
- *lucene索引_创建_域选项
[索引建立步骤] [创建Directory] [创建writer] [创建文档并添加索引] 文档和域的概念很重要 文档相当于表中的每一条记录,域相当于表中的每一个字段. [查询索引的基本信息] 使用I ...
- Apache Lucene(全文检索引擎)—创建索引
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...
- JAVAEE——Lucene基础:什么是全文检索、Lucene实现全文检索的流程、配置开发环境、索引库创建与管理
1. 学习计划 第一天:Lucene的基础知识 1.案例分析:什么是全文检索,如何实现全文检索 2.Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3.配置开发环境 4.创建索引库 5 ...
- Lucene 4.7 --创建索引
Lucene的最新版本和以前的语法或者类名,类规定都相差甚远 0.准备工作: 1). Lucene官方API http://lucene.apache.org/core/4_7_0/index.htm ...
- Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索
Lucene 的四大索引查询 清单1:使用布尔操作符 Java代码 //Test boolean operator blic void testOperator(String indexD ...
- 42、lucene和机器学习进行全文搜索,并排序
package com.lucene.test; import java.io.BufferedInputStream; import java.io.File; import java.io.Fil ...
- paip.lucene 4.3 中文语义搜索最佳实践
paip.lucene 4.3 中文语义搜索最佳实践 首先一个问题是要不要使用lucene 自带的分词器...我觉得最好不使用哪自带的分词器.效果还凑火,就是不好控制... 先使用ik,ict,mms ...
随机推荐
- js数组中的注意
1.数组删除 2.数组合并 3.原数组会被修改的数组方法有: 1)排序 .sotr() 2)逆序 .reverse() 3)数组拼接 .splice()
- Android Studio新手
目标:Android Studio新手–>下载安装配置–>零基础入门–>基本使用–>调试技能–>构建项目基础–>使用AS应对常规应用开发 AS简介 经过2年时间的研 ...
- canvas烟花-娱乐
网上看到一个释放烟花的canvas案例,很好看哦. 新建文本,把下面代码复制进去,后缀名改为html,用浏览器打开即可. 看懂注释后,可以自己修改烟花的各个效果.我试过让烟花炸成了心型.:-) < ...
- nyoj587 hdu1045 简单深搜
#include<iostream> #include<cstdio> #include<queue> #include<vector> #includ ...
- 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版
一.前言 多条件查询分页以及排序 每个系统里都会有这个的代码 做好这块 可以大大提高开发效率 所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...
- linux挂载新硬盘
Linux添加新硬盘自动挂载硬盘的具体步骤 1.插入新硬盘,启动Linux服务器,使用fdisk -l 查看硬盘 #fdisk -l Disk /dev/sdb: 1000.2 GB, 1000204 ...
- c++中宽字节表示
1.C++语言中_T Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候 ...
- JQUERY 轮播插件
闲来无事,写个轮播插件,项目中用到的时候就无需在写了,不然会累死宝宝的 废话少说 代码上 html部分 <div class="lunbo"> <ul> & ...
- imx6平台qt锯齿原因分析
gbl_alpha:全局alpha 就是设置整个界面的alpha值 loc_alpha 本地alpha 就是图片里面自带的alpha值 color_key color Key 要把界面透出来,就要设置 ...
- Python笔记5(字符串)-20160921
一.字符串常用方法 1.title():返回字符串的标题版本,即单词首字母大写其余字母小写 2.upper():返回字符串全部大写版本,lower()则返回字符串全部小写版本 >>> ...