文档章节

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
满风

满风

粉丝 89
博文 169
码字总数 174060
作品 0
杭州
技术主管
私信 提问
Apache Lucene全局搜索引擎入门教程

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

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

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

邵鸿鑫
2016/06/24
0
0
用lucene实现在一个(或者多个)字段中查找多个关键字

  最近跟着师兄们做个项目,我的任务就是负责做个“全文检索”的小模块。用到了Lucene的索引,下面的是其中的用Lucene实现在索引的一个字段(比如文章内容字段)进行查找多个关键字的实例代码...

旭东的博客
2013/05/08
0
0
利用Lucene创建索引

利用Lucene的IndexWriter建立索引(详解) 需要lucene-analyzers-common-4.5.1.jar以上 /* * 建立索引,然后把建立后的文档添加到索引中去 * 提示先使用Document和Field把Field加入到Document中...

帅的不像男的
2016/05/24
49
0
lucene之索引创建

package org.itat.index; import java.io.File; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.u......

泡海椒
2015/12/02
13
0

没有更多内容

加载失败,请刷新页面

加载更多

20181213 上课截图

小丑鱼00
9分钟前
0
0
nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
16分钟前
1
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
32分钟前
1
0
看完让你彻底搞懂Websocket原理

作者:Ovear 链接:https://www.zhihu.com/question/20215561/answer/40316953 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 额。。最高票答案没答到点...

时刻在奔跑
46分钟前
2
0
Spring Cloud Stream消费失败后的处理策略(一):自动重试

之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式。不过不论...

程序猿DD
48分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部