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中 ...
随机推荐
- stm32中的延时函数
//粗延时函数,微秒 void delay_nus(u16 time) { u16 i=0; while(time--) { i=10; //自己定义 while(i--) ; } } //毫秒级的 ...
- Atom手动安装插件和模块的解决方案
最近开始使用Atom编辑器写作.为了预览带LaTeX公式的markdown文档,尝试安装插件markdown-preview-plus,但是总是失败.经过仔细查看错误输出和网上相关问答,发现尽管报错为 ...
- 关于System.Windows.Forms.DateTimePicker的一个Bug
几天接到客户的反馈,说系统无法查询2017年2月份的账单,原因是没办法选择2017年2月份,没办法选择2月份???,马上开启vs,运行系统,应为市去年的系统,测试数据也是去年的,就查询了2016年2月 ...
- 用 Python 编写网络爬虫 笔记
Chapter I 简介 为什么要写爬虫? 每个网站都应该提供 API,然而这是不可能的 即使提供了 API,往往也会限速,不如自己找接口 注意已知条件(robots.txt 和 sitemap.xm ...
- crontab定时任务不执行的原因
1.重启crontab若是遇见"You (cloudlogin) are not allowed to use this program (crontab) ...
- .NET Core 2.0体验
.NET Core 2.0预览版及.NET Standard 2.0 Preview 这个月也就要发布了. 具体相关信息可以查看之前的文章.NET Core 2.0及.NET Standard 2.0 ...
- Hadoop化繁为简-从安装Linux到搭建集群环境
简介与环境准备 hadoop的核心是分布式文件系统HDFS以及批处理计算MapReduce.近年,随着大数据.云计算.物联网的兴起,也极大的吸引了我的兴趣,看了网上很多文章,感觉还是云里雾里,很多不必 ...
- Visual Lisp获得网络时间的方法
(defun c:tt (/ ie-obj) (setq ie-obj (vlax-get-or-create-object "Msxml2.xmlhttp")) ) (vlax- ...
- Thinkphp模板简单入门
Thinkphp模板概述: ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签, ...
- MyBatis之ObjectFactory
关于在MyBatis中的ObjectFactory有什么用,在官方文档中有这样的描述(大多数网上的博客都是直接引用这一描述):MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(Obj ...