lucene全文検索の3:インデックスフィールドを生成し、インデックスドキュメント(インデックスフィールドに重み付け)を作成するlucene 5.5.3.3に基づく


前言:前章ではインデックスの作成を実現しましたが、インデックスドキュメントはありません.この章では、フィールドの生成、インデックスドキュメントの作成、フィールドの重み付け、インデックスディレクトリへのドキュメントの保存方法について説明します.
luncene 5.5.3集合jarパッケージダウンロードアドレス:http://download.csdn.net/detail/eguid_1/9677589
一、索引ドキュメントの作成
1つのインデックス・ディレクトリに複数のインデックス・ドキュメントを配置できます.各インデックス・ドキュメントは複数のインデックス・フィールドで構成され、インデックス・フィールドはインデックスするフィールド名とフィールドの内容、およびウェイト値で構成されます.
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全文検索の4:インデックス検索器の作成、6種類のドキュメント検索器の実装、および検索結果分析(IKAnalylyzer分詞器を組み合わせた検索器)lucene 5.5.2に基づく