文档章节

Lucene6.0 查询File实例

liuhuics10
 liuhuics10
发布于 2016/04/28 16:11
字数 484
阅读 202
收藏 0

先取出文件夹下的所有File,然后给这些File创建索引,最后根据条件查询

1.pom.xml:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>hui</groupId>
	<artifactId>Lucene</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Lucene</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>


		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-core</artifactId>
			<version>6.0.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-analyzers-common</artifactId>
			<version>6.0.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-queryparser</artifactId>
			<version>6.0.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-highlighter</artifactId>
			<version>6.0.0</version>
		</dependency>

	</dependencies>
</project>

2.递归取出文件夹下的所有文件ListFiles.java:

package luceneTest;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ListFiles {

	private static List<File> filesResult = new ArrayList<>();

	public static void main(String[] args) {

		List<File> files = listFiles("e:/eclipse/OOP");
		System.out.println(files.size());
		for (File f : files) {
			System.out.println(f.getName());
		}
	}

	public static List<File> listFiles(String srcPath) {

		File file = new File(srcPath);
		File[] files = file.listFiles();

		for (File f : files) {
			if (f.isDirectory()) {
				listFiles(f.getAbsolutePath());
			} else {
				filesResult.add(f);
			}
		}
		return filesResult;
	}
}

3.根据自己的条件创建索引+查询:FilesTest.java:

package luceneTest;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.List;

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.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.ParseException;
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.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class FilesTest {
	public static void main(String[] args) throws ParseException, IOException {

		String srcPath = "E:/eclipse/OOP";
		String destPath = "e:/test/index";
		// createIndexTo(srcPath, destPath);

		read(destPath, "fileContent", "string");
	}

	public static void read(String indexPath, String fieldName, String parseString)
			throws IOException, ParseException {

		Analyzer analyzer = new StandardAnalyzer();

		Directory directory = FSDirectory.open(Paths.get(indexPath));

		// Now search the index:
		DirectoryReader reader = DirectoryReader.open(directory);

		IndexSearcher searcher = new IndexSearcher(reader);

		process(searcher, analyzer, fieldName, parseString);
		reader.close();
		directory.close();
	}

	private static void process(IndexSearcher searcher, Analyzer analyzer,
			String fieldName, String parseString) throws ParseException, IOException {
		QueryParser parser = new QueryParser(fieldName, analyzer);
		Query query = parser.parse(parseString);
		ScoreDoc[] hits = searcher.search(query, 1000).scoreDocs;

		System.out.println(hits.length);

		for (int i = 0; i < hits.length; i++) {
			Document hitDoc = searcher.doc(hits[i].doc);

			System.out.println(hitDoc.get("filePath"));
		}
	}

	public static void createIndexTo(String srcPath, String destPath) throws IOException {
		Analyzer analyzer = new StandardAnalyzer();

		Directory directory = FSDirectory.open(Paths.get(destPath));

		IndexWriterConfig config = new IndexWriterConfig(analyzer);
		IndexWriter writer = new IndexWriter(directory, config);

		List<File> files = ListFiles.listFiles(srcPath);
		FileReader fileReader = null;

		for (File temp : files) {
			if (temp.isFile()) {

				fileReader = new FileReader(temp);
				Document doc = new Document();
				doc.add(new Field("fileName", temp.getName(), TextField.TYPE_STORED));

				doc.add(new Field("fileContent", fileReader, TextField.TYPE_NOT_STORED));

				doc.add(new Field("filePath", temp.getAbsolutePath(),
						TextField.TYPE_STORED));
				System.out.println(temp.getAbsolutePath() + "   indexed");
				writer.addDocument(doc);
			}
		}
		writer.close();
	}

}


© 著作权归作者所有

liuhuics10
粉丝 4
博文 97
码字总数 39010
作品 0
烟台
私信 提问
Lucene6.0 BooleanQuery组合查询应用实例

组合关系代表的意思如下: 1、MUST和MUST表示“与”的关系,即“并集”。 2、MUST和MUSTNOT前者包含后者不包含。 3、MUSTNOT和MUSTNOT没意义 4、SHOULD与MUST表示MUST,SHOULD失去意义; 5、S...

liuhuics10
2016/04/28
411
0
Lucene highlighter高亮显示

这个功能非常重要,先贴代码出来: 程序中,重要点都做了介绍,至于基础性的东西,很难讲全面,具体可以参看lucene in action第二版,上面说得相对详细点,虽然说是基于3.0版本的,但大多数东...

g_dragon
2016/05/08
701
0
android_studio Lucene入门

最近想在android上弄个搜索应用,但入门就比较麻烦。首先现在都建议用 android studio这个工具,其次lucene更新实在太快,新版资料很难找。 一、android studio 这个版本目前已经更新到2.0了...

g_dragon
2016/05/07
312
0
Lucene6.0 创建索引及查询text简单实例

1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://ma......

liuhuics10
2016/04/28
208
0
Lucene6.0学习笔记——常用查询(二)

1.通配符查询WildcardQuery Lucene提供两种通配符,和?查询,表示能匹配多个字符,?仅能匹配一个字符。 例如:现在有两个词,name与nav,对他们进行通配符查询,na*可以搜索出两个词,而na?...

OSC一霸
2016/07/21
76
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
19分钟前
8
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
9
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部