lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3
前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段、创建索引文档,给字段加权以及保存文档到索引器目录
luncene5.5.3集合jar包下载地址:http://download.csdn.net/detail/eguid_1/9677589
一、创建索引文档
一个索引目录可以放多个索引文档,每个索引文档由多个索引字段组成,索引字段由要索引的字段名和字段内容以及权重值组成
1、构建索引字段并加权
/**
* 创建索引字段
* @param boost
* -权重值
* @param fieldName
* - 字段名
* @param statement
* -内容
* @param fieldType
* -字段存储类型
* @return
*/
public Field createField(String fieldName, String statement, FieldType fieldType, Float boost) {
Field field = null;
if (fieldName != null && statement != null && fieldType != null) {
field = new Field(fieldName, statement, fieldType);
if (boost != null) {
field.setBoost(boost);
}
}
return field;
} /**
* 创建索引字段
*
* @param fieldName
* @param reader
* @param type
* @param boost
* @return
*/
public Field createField(String fieldName, Reader reader, FieldType type, Float boost) {
Field field = null;
if (fieldName != null && reader != null) {
field = new Field(fieldName, reader, type);
if (boost != null) {
field.setBoost(boost);
}
}
return field;
} /**
* 创建索引字段
*
* @param fieldName
* @param tokenStream
* @param type
* @param boost
* @return
*/
public Field createField(String fieldName, TokenStream tokenStream, FieldType type, Float boost) {
Field field = null;
if (fieldName != null && tokenStream != null) {
field = new Field(fieldName, tokenStream, type);
if (boost != null) {
field.setBoost(boost);
}
}
return field;
} /**
* 创建索引字段
*
* @param fieldName
* @param value
* @param type
* @param boost
* @return
*/
public Field createField(String fieldName, byte[] value, FieldType type, Float boost) {
return value != null ? createField(fieldName, value, 0, value.length, type, boost) : null;
} /**
* 创建索引字段
*
* @param fieldName
* @param value
* @param offset
* @param length
* @param type
* @param boost
* @return
*/
public Field createField(String fieldName, byte[] value, int offset, int length, FieldType type, Float boost) {
Field field = null;
if (fieldName != null && value != null && type != null) {
field = new Field(fieldName, value, offset, length, type);
if (boost != null) {
field.setBoost(boost);
}
}
return field;
}
2、创建索引文档
/**
* 创建索引文档
*
* @return
*/
public Document createDocument() {
return new Document();
}
二、添加字段到索引文档
/**
* 把字段存放到索引文档
*
* @param document
* @param field
* @return
*/
public Document addFiled(Document document, Field field) {
if (field != null) {
document.add(field);
}
return document;
}
/**
* 批量存放字段到索引文档
* @param document
* @param fields
* @return
*/
public Document addFiledList(Document document, Field... fields) {
if (fields != null && fields.length > 0) {
for (Field field : fields) {
document.add(field);
}
}
return document;
}
三、给索引器添加索引文档
使用上一章中的方法把生成的文档添加到索引中
事实上我们常把索引文档根据不同分类保存到不同的索引目录,再搜索时可以根据不同索引目录进行搜索。
例如:
Analyzer analyzer=createAnalyzer(false); Directory dir=createDirectory(null, "d:","dir","search"); IndexWriterConfig conf=createIndexConf(analyzer, OpenMode.CREATE_OR_APPEND, false);
IndexWriter index=createIndex(dir, conf); //创建一个文档
Document doc=createDocument();
String[] states = new String[] {"欢迎来到eguid的博客", "欢迎大家来到eguid的技术博客", "欢迎大家来到eguid的技术博客,很开心能和大家一起分享开源技术"};
//创建字段
Field[] fields=createFields("字段名", states, TextField.TYPE_STORED, 1.1f);
//批量增加字段到索引文档
addFiledList(doc, fields);
//把索引文档保存到索引器
index.addDocument(doc);
这样就把添加了一个索引,想要搜索这个索引,那么接下来让我们创建搜索器吧
下一章:lucene全文搜索之四:创建索引搜索器、6种文档搜索器实现以及搜索结果分析(结合IKAnalyzer分词器的搜索器)基于lucene5.5.2
lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3的更多相关文章
- lucene全文搜索之二:创建索引器(创建IKAnalyzer分词器和索引目录管理)基于lucene5.5.3
前言: lucene全文搜索之一中讲解了lucene开发搜索服务的基本结构,本章将会讲解如何创建索引器.管理索引目录和中文分词器的使用. 包括标准分词器,IKAnalyzer分词器以及两种索引目录的创 ...
- lucene全文搜索之一:lucene的主要功能和基本结构(基于lucene5.5.3)
前言:lucene并不是像solr或elastic那样提供现成的.直接部署可用的系统,而是一套jar包,提供了一些常见语言分词.构建索引和创建搜索器等等功能的API,我们常用到的也就是分词器.索引目录 ...
- ElasticSearch入门系列(三)文档,索引,搜索和聚合
一.文档 在实际使用中的对象往往拥有复杂的数据结构 Elasticsearch是面向文档的,这意味着他可以存储整个对象或文档,然而他不仅仅是存储,还会索引每个文档的内容使之可以被搜索,在Elastic ...
- lucene全文搜索之四:创建索引搜索器、6种文档搜索器实现以及搜索结果分析(结合IKAnalyzer分词器的搜索器)基于lucene5.5.3
前言: 前面几章已经很详细的讲解了如何创建索引器对索引进行增删查(没有更新操作).如何管理索引目录以及如何使用分词器,上一章讲解了如何生成索引字段和创建索引文档,并把创建的索引文档保存到索引目录,到这 ...
- Lucene全文搜索 分组,精确查找,模糊查找
http://zm603380946.iteye.com/blog/1827318 完全个人理解,如有更好的方法,欢迎一起讨论 LuceneUtils.java package com.zbiti.l ...
- 用Lucene对文档进行索引搜索
问题 现在给出很多份文档,现在对某个搜索词感兴趣,想找到相关的文档. 简单搜索 一种简单粗暴的做法是: 1.读取每个文档:2.找到其中含有搜索词的文档:3.对找到的文档中搜索词出现的次数统计:4.根据 ...
- 【ElasticSearch】:索引Index、文档Document、字段Field
因为从ElasticSearch6.X开始,官方准备废弃Type了.对应数据库,对ElasticSearch的理解如下: ElasticSearch 索引Index 文档Document 字段Fiel ...
- Elasticsearch-如何控制存储和索引文档(_source、_all、返回源文档的某些字段)
Elasticsearch-如何控制存储和索引文档(_source._all) _source:可以在索引中存储文档._all:可以在单个字段上索引所有内容. 1. 存储原有内容的_source _s ...
- elasticsearch——海量文档高性能索引系统
elasticsearch elasticsearch是一个高性能高扩展性的索引系统,底层基于apache lucene. 可结合kibana工具进行可视化. 概念: index 索引: 类似SQL中 ...
随机推荐
- java spring mvc 全注解
本人苦逼学生一枚,马上就要毕业,面临找工作,实在是不想离开学校.在老师的教导下学习了spring mvc ,配置文件实在繁琐,因此网上百度学习了spring mvc 全注解方式完成spring的装配工 ...
- 篇4 安卓app自动化测试-Appium API进阶
篇4 安卓app自动化测试-Appium API进阶 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试& ...
- Python:认识变量和字符串
几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣赏的人.明星或模特等,直至最后 ...
- ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
Oracle 设置默认数据库 如果我们的服务器上或者电脑上安装了多个数据库,当我们使用sqlplus时如果为指定数据库时登录到的是哪一个数据库呢?今天遇到了一个老问题: ORA-01034: ORAC ...
- Java 第一个程序案HelloWorld例记录
1.编辑源代码,先看代码: class HelloWorld{ public static void main(String[] args) { System.out.println("He ...
- Unity 总裁 John Riccitiello 发话:VR足以匹敌互联网
在2017年Vision Summit大会的开幕演讲中,Unity首席执行官John Riccitiello向观众通报了开发人员如何利用Oculus,HTC等品牌创造的机遇来打造虚拟现实(VR)行业, ...
- 状态(State)模式
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的 ...
- GO的初始简书(一)简介安装
已经玩了很长一段时间的golang了,做个gopher,下面我将逐步展示各种go语言的开发,从入门开始哦,完全是凭着自己学习和实践的结果展示,如果有说的不对的,请指正. 简介 go语言是由Google ...
- Another kind of Fibonacce(矩阵快速幂,HDU3306)
Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- Java UDP Socket
本文转载地址: Java学习路上的收获:http://blog.csdn.net/qinpeng100423/article/details/8980423 一. UDP协议定义 U ...