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中 ...
随机推荐
- 为linux安装xen-tools提示/dev/xvdd does not exist
看样子百度还是不如google啊.百度上找到的信息完全无用.google上却给我找到了... 1:当/dev/xvdd does not exist错误出现时,可以尝试下 mount /dev/cdr ...
- JDK与Apache Tomcat服务器的安装步骤
先解释一下JDK和Tomcat是什么: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP ...
- bzoj1013 [JSOI2008]球形空间产生器
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...
- Windows7系统的封装
系统装到虚拟机优化完成以后,可以装上自己想要装的软件,也可以不装做个纯净版的.今天用ES封装,首先打开一般我们只点这四项就够了,如下图 写上自己想写的,也可以不写系统默认,直接点“下一步”关闭设备管理 ...
- [内存管理]管理图解v0.1 v0.2 v0.3
内存管理图解v0.1 内存管理图解v0.2 内存管理图解v0.3
- 如何在Linux下快速安装MapTiler
研究背景: 实际项目用到MapTiler时,为了适应项目不同场景需求,需要测试MapTiler在linux下切图速度,这时就涉及到到MapTiler在Linux下安装的问题,从 M ...
- office web apps 整合Java web项目
之前两篇文章将服务器安装好了,项目主要的就是这么讲其整合到我们的项目中,网上大部分都是asp.net的,很少有介绍Java如何整合的,经过百度,终于将其整合到了我的项目中. 首先建个servlet拦截 ...
- jquery获取文件名称
$("#fileupload").on("change",function(){ var filePath=$(this).val(); if(filePath ...
- linux优化之SElinux关闭
查看selinux状态: # getenforce 注:Enforcing表示开启,Permissive表示禁用 临时关闭或开启selinux: # setenforce [1|0] 注:1是 ...
- Python dict 按键和值排序
python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行:1 下面的是按照value的值从大到小的顺序来排序. ...