• 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







  • 相关阅读:
    50个SQL语句(MySQL版) 问题六
    50个SQL语句(MySQL版) 问题五
    50个SQL语句(MySQL版) 问题四
    50个SQL语句(MySQL版) 问题三
    50个SQL语句(MySQL版) 问题二
    50个SQL语句(MySQL版) 问题一
    50个SQL语句(MySQL版) 建表 插入数据
    相邻元素margin的自动合并与float的坑
    STL之list
    你真的会用搜索吗?—— google 搜索技巧
  • 原文地址:https://www.cnblogs.com/eguid/p/6821574.html
Copyright © 2020-2023  润新知