文档章节

lucene 实例2

满风
 满风
发布于 2012/03/07 17:43
字数 415
阅读 259
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

package com.lucene;

import java.io.File;
import java.io.FileReader;
import java.util.Date;

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.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.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;

/**
* 简单的搜索
*
* 给指定的文件夹下的文件建立索引 ,为指定的的文件创建索引 基本搜索功能
*
* @author dengyang
*
*/
public class TestIndex2 {

// static Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);//内置分词器
static Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);

public static void createIndexByPath(File indexDir, File dataDir) {
try {
Directory dir = new SimpleFSDirectory(indexDir);
IndexWriterConfig iwConf = new IndexWriterConfig(Version.LUCENE_35,analyzer);
iwConf.setOpenMode(OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(dir, iwConf);
long startTime = new Date().getTime();
File[] files = dataDir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
// System.out.println(files[i].getCanonicalPath());
// System.out.println(files[i].getName());
Document document = new Document();
document.add(new Field("path", files[i].getCanonicalPath(),Field.Store.YES, Field.Index.ANALYZED));
document.add(new Field("filename", files[i].getName(),Field.Store.YES, Field.Index.ANALYZED));
document.add(new Field("contents", new FileReader(files[i])));
indexWriter.addDocument(document);
}
}
indexWriter.close();
long endTime = new Date().getTime();
System.out.println("创建索引功耗时:" + (endTime - startTime) / 1000 + "s");
} catch (Exception e) {
e.printStackTrace();
}
}

public static void searchIndexByString(String searchStr, String fileName,File indexDir) {
try {
// fileName:根据某个域搜索 new MultiFieldQueryParser 可以用多个域
QueryParser queryParser = new QueryParser(Version.LUCENE_35,fileName, analyzer);
Query query = queryParser.parse(searchStr);
System.out.println("query = "+query);
IndexReader reader = IndexReader.open(new SimpleFSDirectory(indexDir));
IndexSearcher searcher = new IndexSearcher(reader);
long startTime = new Date().getTime();
TopDocs topDocs = searcher.search(query, 10);//默认的搜索方法
// searcher.setDefaultFieldSortScoring(true, false);//评分
// TopDocs topDocs = searcher.search(query, null, 20, Sort.RELEVANCE);//搜索排序 , 不需要过滤
// Filter filter = new QueryWrapperFilter(new TermQuery(new Term("filename", "stylesheet")));
// TopDocs topDocs = searcher.search(query, filter, 20, Sort.RELEVANCE);//搜索排序 , 过滤
System.out.println("共有文件:" + topDocs.totalHits);
for (int i = 0; i < topDocs.scoreDocs.length; i++) {
Document document = searcher.doc(topDocs.scoreDocs[i].doc);
System.out.println("=" + i);
System.out.println("path=" + document.get("path"));
System.out.println("filename=" + document.get("filename"));
}
reader.close();
searcher.close();
long endTime = new Date().getTime();
System.out.println("搜索功耗时:" + (endTime - startTime));
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* @param args
*/
public static void main(String[] args) {
File indexDir = new File("D:\\luceneIndex");
File dataDir = new File("F:\\面试与就业");

createIndexByPath(indexDir, dataDir);
// searchIndexByString("面试与就业", "path", indexDir);
searchIndexByString("面试","filename",indexDir);
}
}

© 著作权归作者所有

上一篇: lucence 实例3
下一篇: lucene 实例1
满风

满风

粉丝 96
博文 181
码字总数 185792
作品 0
杭州
技术主管
私信 提问
加载中

评论(0)

lucene教程--全文检索技术

1 Lucene 示例代码 https://blog.csdn.net/qzqanzc/article/details/80916430 2 Lucene 实例教程(一)初识Lucene https://blog.csdn.net/chenghui0317/article/details/10052103 3 关键词高亮......

osc_zsm40sb6
2018/09/11
2
0
Solr总结(一)——solr简介

在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快,搜索结果按相关度排序,搜索内容格式不固定等,...

一路向前!
04/01
0
0
Lucene索引库维护、搜索、中文分词器

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

osc_e3fen7cx
2019/07/18
14
0
Apache Lucene全局搜索引擎入门教程

Lucene简介 Lucent:Apache软件基金会Jakarta项目组的一个子项目,Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其...

Javahih
2018/04/19
0
0
全文检索——Lucene

简单介绍: 全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法。全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统。 像我们平时用的百度谷歌搜索引擎,...

邵鸿鑫
2016/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring中@Import的三种情况

我们在使用Spring框架中,特别是框架级的功能,经常看到有@Import导入功能, 我就介绍下它能导入什么,首先声明下@Import是注解,导入类型可分为三类: 1. 导入配置 @Configuration,类似于s...

董广明
30分钟前
13
0
Java中的类型推断和lambda表达式

简介 java是强类型的编程语言,每个java中使用到的变量都需要定义它的类型,否则会编译失败。强类型语言的好处就是可以尽可能的在编译期间就发现代码中可能出现的问题,从而减少在运行时出现...

flydean
30分钟前
20
1
How to install Docker on CentOS8

How to install Docker on CentOS8 Step 1, Prepare Update OS # yum update -y Install download tool wget # yum install wget -y Step 2, Install containerd.io To install docker in ......

Iridium
31分钟前
11
0
Java字节码

Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。每一个Java字节码指令是一个byte数字,并且有一个对应的助记符。 Java虚拟机常用指令 常量入栈指令 常量入栈指令的功能...

算法之名
今天
66
0
腾讯副总裁魏颖:提瓢入市,倚杖而归

  魏颖,腾讯公司副总裁,2008 年加入腾讯,全面负责公司薪酬福利、绩效管理、员工关系以及海外业务人力资源。   ————————   很多人对人力资源(HR)工作的理解就是一些人事流...

alkcendkljk
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部