/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.cms.lucene.executor;
import java.io.IOException;
import java.util.Map.Entry;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import com.jinhe.tss.cms.lucene.ArticleContent;
/**
* <p> FiledIndexExecutor.java </p>
*
* 根据文章特定字段的索引执行器:根据文章的某一个字段来创建索引。
*/
public abstract class FiledIndexExecutor extends DefaultIndexExecutor {
protected abstract String getFiledName();
/**
* 创建索引文本
* @param pubFile 索引文件存放路径
* @param content 附件内容
* @param map 文章属性Map
* @return
*/
protected Document createIndexDoc( ArticleContent bean ) throws IOException {
Document luceneDoc = new Document();
for( Entry<String, String> entry : bean.getArticleAttributes().entrySet() ) {
String key = entry.getKey();
String value = entry.getValue();
// 发布日期、创建日期 字段特殊处理,用于结果排序
if(FIELD_ISSUEDATE.equals(key) || FIELD_CREATETIME.equals(key)){
luceneDoc.add(new Field(key, value, Field.Store.YES, Field.Index.UN_TOKENIZED));
}
else if( getFiledName().equals(key) ) {
luceneDoc.add(new Field(getFiledName(), value, Field.Store.YES, Field.Index.TOKENIZED));
}
else if("content".equals(key)){
continue; // 文章内容太大,不存入到索引文件
}
else {
luceneDoc.add(new Field(key, value, Field.Store.YES, Field.Index.NO));
}
}
return luceneDoc;
}
public Query createIndexQuery(String searchStr) throws ParseException {
return createIndexQuery(getFiledName(), searchStr);
}
}