Lucene创建索引库

1、导包

 

2、实现步骤

第一步:创建一个java工程,并导入jar包。

第二步:创建一个indexwriter对象。

1)指定索引库的存放位置Directory对象

2)指定一个分析器,对文档内容进行分析。

第二步:创建document对象。

第三步:创建field对象,将field添加到document对象中。

第四步:使用indexwriter对象将document对象写入索引库,此过程进行索引创建。并将索引和document对象写入索引库。

第五步:关闭IndexWriter对象。

3、Field域的属性及其子类

是否分析:是否对域的内容进行分词处理。前提是我们要对域的内容进行查询。

是否索引:将Field分析后的词或整个Field值进行索引,只有索引方可搜索到。

比如:商品名称、商品简介分析后进行索引,订单号、身份证号不用分析但也要索引,这些将来都要作为查询条件。

是否存储:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取

比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。

 

是否存储的标准:是否要将内容展示给用户

Field类

数据类型

Analyzed

是否分析

Indexed

是否索引

Stored

是否存储

说明

StringField(FieldName, FieldValue,Store.YES))

字符串

N

Y

Y或N

这个Field用来构建一个字符串Field,但是不会进行分析,会将整个串存储在索引中,比如(订单号,姓名等)

是否存储在文档中用Store.YES或Store.NO决定

LongField(FieldName, FieldValue,Store.YES)

Long型

Y

Y

Y或N

这个Field用来构建一个Long数字型Field,进行分析和索引,比如(价格)

是否存储在文档中用Store.YES或Store.NO决定

StoredField(FieldName, FieldValue) 

重载方法,支持多种类型

N

N

Y

这个Field用来构建不同类型Field

不分析,不索引,但要Field存储在文档中

TextField(FieldName, FieldValue, Store.NO)

TextField(FieldName, reader)

 

字符串

Y

Y

Y或N

如果是一个Reader, lucene猜测内容比较多,会采用Unstored的策略.

 

4、代码实现

@Test
	public void createIndex() throws IOException {
//		1、创建一个indexwriter对象。
//			1)指定索引库的存放位置Directory对象
//			2)指定一个分析器,对文档内容进行分析。
		Directory directory = FSDirectory.open(new File("E:\\eclipse-workspace\\ww_19lucene&solr\\index"));
		//索引库放到内存中
//		Directory directory = new RAMDirectory();
		//创建一个标准分析器
		Analyzer analyzer = new StandardAnalyzer();
		//第一个参数:Lucene的版本号(当项目中Lucene的jar不只一个时,可以通过这个选择,latest表示最新版本),第二个参数分析器
		IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LATEST, analyzer);
		IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
		
		//原始文档的路径
		File dir = new File("E:\\eclipse-workspace\\ww_19lucene&solr\\searchsource");
		//遍历原始文档路径下的所有文档
		for (File file : dir.listFiles()) {
			//获得文件名、文件路径、文件大小、文件内容
			String fileName = file.getName();
			String filePath = file.getPath();
			Long fileSize = FileUtils.sizeOf(file);
			String fileContent = FileUtils.readFileToString(file);
			
//		2、创建document对象。
//		3、创建field对象,将field添加到document对象中。
			//创建field对象
			Field fileNameField = new TextField("fileName", fileName, Store.YES);
			Field filePathField = new StoredField("filePath", filePath);
			Field fileSizeField = new LongField("fileSize", fileSize, Store.YES);
			Field fileContentField = new TextField("fileContent", fileContent, Store.YES);
			//创建document对象,将field添加到document对象中
			Document document = new Document();
			document.add(fileNameField);
			document.add(filePathField);
			document.add(fileSizeField);
			document.add(fileContentField);
			
//		4、使用indexwriter对象将document对象写入索引库,此过程进行索引创建。并将索引和document对象写入索引库。
			indexWriter.addDocument(document);
			
		}
		
//		5、关闭IndexWriter对象。
		indexWriter.close();
	}	

创建索引后,每一个document会有一个id ,从0开始

5、使用luke查看索引

工具结构:

开始,找到索引的位置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值