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中 ...
随机推荐
- 【NIO】Java NIO之选择器
一.前言 前面已经学习了缓冲和通道,接着学习选择器. 二.选择器 2.1 选择器基础 选择器管理一个被注册的通道集合的信息和它们的就绪状态,通道和选择器一起被注册,并且选择器可更新通道的就绪状态,也可 ...
- MVC框架中,遇到 [程序集清单定义与程序集引用不匹配]怎么办?
项目里有一个WinForm程序,它需要使用一套第三方控件.而我的机器上存有这套控件的两种版本(一个是源码版,一个是演示版).结果经常出现“程序集清单定义与程序集引用不匹配的问题”的异常.最要命的是有时 ...
- 实现各种 CSS3 文本动画效果
这个插件集成了一些非常好的 JavaScript 库,提供一个方便使用的文本动画插件,可以让你为网页中的文字运用各种动画. 源码下载 在线演示
- DELL Precision Tower7910重装系统+开机出现GRUB界面如何处理
想给实验室的工作站重新装个Win7系统,因为以前并没装过工作站的系统,发现和普通的电脑装系统还是有些不一样的.主要的问题就在于主板的不同. 尝试了老毛桃U盘启动盘安装,结果在WinPE里面提示找不到硬 ...
- 不完全CSS3图解
温故而知新.用XMind总结了下CSS3,打钩的代表比较常用的.希望对大家整体上理解CSS3有所帮助吧.
- ajax获取数据后怎么去渲染到页面?
$.ajax({ url:"apiAttachmentAction_uploadAttachment.action", type:"post", data:fo ...
- 自动化运维:使用psutil和paramiko读取远程主机信息
1.前言 今天大致看了下自动化运维的东西,里面介绍到了psutil模块,其封装了linux 下的大部分shell命令,用起来比较方便.但是基本都是介绍在本地如何使用,而实际情况大家很少这样使用,一般 ...
- Bootstrap Flat UI的select下拉框显示不出来 问题解决
Bootstrap Flat UI的select下拉框显示不出来?看这里,恰巧今天我也遇到了这个问题: 点击Messages后并没有出现下拉列表,然而官网的index.html却能显示出来. 经过一番 ...
- 关于java和c++中的i++
看到一个题目,大概是i=i++之类. 乍一看很简单,都知道i++的先参与计算再自增, 所以i不变. 但是仔细一想, 如果i不变, 那么在赋值之后, 自增的i, 增加的是谁呢? 逻辑顺序是怎样的呢? / ...
- 开源自己写的一个拖拽库,兼容到IE8+
github地址:https://github.com/qiangzi7723/draggable 目前这个库的兼容做到了兼容IE8,所以如果需要兼容IE8的朋友不妨试试.库里面写了很多的注释,对于想 ...