您的位置:首页 > 其它

Lucene进阶操作,单字段、多字段和布尔搜索

2017-08-30 17:05 501 查看
上一篇文章是入门,现在是进阶,通过项目用到的例子给大家呈现较好的方法。本方法基于Lucene-4.7.2因为项目要用到JDK1.6。

这里使用几个很好用的类,是经过多次试验整理出来的,分别是单字段搜索,多字段搜索以及布尔搜索。

1 单字段搜索

package com.rbc.hbms.search.util.lucene;

import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.IntField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLEncoder;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import com.rbc.hbms.estateView.entity.HbmsHouse;
import com.tds.framework.wsmanage.util.StringUtils;

/**
* 布尔搜索
* Created by MoSon on 2017/7/5.
*/
public class ATermQuery {

public static void main(String[] args) throws IOException, ParseException {
List<HbmsHouse> address = getAddressById("114955758");
System.out.println(address);
}

/**
* 根据id查询
* @param address  要查询地址
* @param number
* @return
* @throws IOException
* @throws ParseException
*/
public static List<HbmsHouse> getAddressById(String keyword) throws IOException, ParseException {
try {
long start = System.currentTimeMillis();
System.out.println("开始时间:" + start);
// 定义索引目录
// Path path = FileSystems.getDefault().getPath("standardIndex");
// Directory directory = FSDirectory.open(path);
Directory directory = FSDirectory.open(new File("D:/EclipseWorkspace/zseboss/standardIndex"));
// 定义索引查看器
IndexReader indexReader = DirectoryReader.open(directory);
// 定义搜索器
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 搜索内容
// 定义查询字段
/*Term term = new  Term("id",id);
Query query = new TermQuery(term);*/

//			IKAnalyzer analyzer = new IKAnalyzer();// 使用IK分词器
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);//定义分词器(标准分词器)
QueryParser parser = new QueryParser(Version.LUCENE_47,"id", analyzer); //定义查询分析器
Query query = parser.parse(keyword);

/**定义高亮组件*/
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span style='color:red;'>", "</span>");
// 构建Scorer,用于选取最佳切片
QueryScorer scorer = new QueryScorer(query);
// 实例化Highlighter组件
Highlighter highlighter = new Highlighter(formatter, scorer);
// 构建Fragmenter对象,用于文档切片
highlighter.setTextFragmenter(new SimpleFragmenter(100));
highlighter.setEncoder(new SimpleHTMLEncoder());

// 定义要获取的数量
// 命中前20条文档
TopDocs topDocs = indexSearcher.search(query, 1);
// 打印命中数
//			System.out.println("命中数:" + topDocs.totalHits);
// 取出文档
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
StringBuilder stringBuilder = new StringBuilder();
// 遍历取出数据

List<HbmsHouse> list = new LinkedList<HbmsHouse>();
for (ScoreDoc scoreDoc : scoreDocs) {
HbmsHouse hh = new HbmsHouse();
float score = scoreDoc.score; // 相似度
// System.out.println("相似度:"+ score);
// 通过indexSearcher的doc方法取出文档
Document doc = indexSearcher.doc(scoreDoc.doc);

// 获取id
String id = doc.get("id");
if(id == null){
continue;
}
//从索引中获取值
String ngName = doc.get("ngName");
String town = doc.get("town");
String pianQu = doc.get("pianQu");
String switchInType = doc.get("switchInType");
String addressType = doc.get("addressType");
String flag = doc.get("flag");
String causes = doc.get("causes");
String crtTime = doc.get("crtTime");

//判断是否为空
if(StringUtils.isNotBlank(ngName)){
hh.setNgName(ngName);
}
if(StringUtils.isNotBlank(town)){
hh.setTown(town);
}
if(StringUtils.isNotBlank(pianQu)){
hh.setPianQu(pianQu);
}
if(StringUtils.isNotBlank(switchInType)){
hh.setSwitchInType(switchInType);
}
if(StringUtils.isNotBlank(addressType)){
hh.setAddressType(addressType);
}
if(flag!=null ){
hh.setFlag(Integer.parseInt(flag));
}
if(StringUtils.isNotBlank(causes)){
hh.setCauses(causes);
}

if (StringUtils.isNotBlank(crtTime)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
Date parse = sdf.parse(crtTime);
hh.setCrtTime(parse);
}

// 获取地址
String name = doc.get("name");
hh.setName(name);

// 高亮
String idHighlighter = highlighter.getBestFragment(analyzer, "id", id);
//				 System.out.println("id(高亮):"+idHighlighter);
//				 System.out.println(name);
hh.setId(idHighlighter);
list.add(hh);
}
System.out.println(stringBuilder.toString());
// 关闭索引查看器
indexReader.close();
long end = System.currentTimeMillis();
System.out.println("开始时间:" + end);
long time = end - start;
System.out.println("用时:" + time + "毫秒");
return list;
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

}

2 布尔搜索

package com.rbc.hbms.search.util.lucene;

import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLEncoder;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import com.rbc.hbms.estateView.entity.HbmsHouse;
import com.tds.framework.wsmanage.util.StringUtils;

/**
* 布尔搜索
* Created by MoSon on 2017/7/5.
*/
public class BooleanSearchQuery {

public static void main(String[] args) throws IOException, ParseException {
// List<LinkedHashMap<String, Object>> address =
// getAddress("煲sjfdkla街道",20);
// System.out.println(address);
}

/**
* 获取符合的地址
*
* @param address
*            要查询地址
* @param number
* @return
* @throws IOException
* @throws ParseException
*/
public static List<HbmsHouse> getAddress(String address, int number) throws IOException, ParseException {
try {
long start = System.currentTimeMillis();
System.out.println("开始时间:" + start);
// 定义索引目录
// Path path = FileSystems.getDefault().getPath("standardIndex");
// Directory directory = FSDirectory.open(path);
Directory directory = FSDirectory.open(new File("D:/EclipseWorkspace/zseboss/standardIndex"));
// 定义索引查看器
IndexReader indexReader = DirectoryReader.open(directory);
// 定义搜索器
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 搜索内容
// 定义查询字段

/**
* 进阶 多关键字的布尔搜索
*/
// 定义Term集合
List<Term> termList = new ArrayList<Term>();
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);
//			IKAnalyzer analyzer = new IKAnalyzer();// 使用IK分词器
// 获取分词结果
List<String> analyseResult = getAnalyseResult(address, analyzer);
for (String result : analyseResult) {
termList.add(new Term("ngName", result));
// System.out.println(result);
}
// 定义TermQuery集合
List<TermQuery> termQueries = new ArrayList<TermQuery>();
// 取出集合结果
for (Term term : termList) {
termQueries.add(new TermQuery(term));
}
// 布尔搜索
BooleanQuery query = new BooleanQuery();
List<BooleanClause> booleanClauses = new ArrayList<BooleanClause>();
// 遍历
for (TermQuery termQuery : termQueries) {
booleanClauses.add(new BooleanClause(termQuery, BooleanClause.Occur.SHOULD));
}
// BooleanQuery.Builder builder = new BooleanQuery.Builder();
for (BooleanClause booleanClause : booleanClauses) {
// builder.add(booleanClause);
query.add(booleanClause);
}
// 检索
// BooleanQuery query = builder.build();

/**定义高亮组件*/
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span style='color:red;'>", "</span>");
// 构建Scorer,用于选取最佳切片
QueryScorer scorer = new QueryScorer(query);
// 实例化Highlighter组件
Highlighter highlighter = new Highlighter(formatter, scorer);
// 构建Fragmenter对象,用于文档切片
highlighter.setTextFragmenter(new SimpleFragmenter(100));
highlighter.setEncoder(new SimpleHTMLEncoder());

// 定义要获取的数量
// 命中前20条文档
TopDocs topDocs = indexSearcher.search(query, number);
// 打印命中数
System.out.println("命中数:" + topDocs.totalHits);
// 取出文档
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
// 遍历取出数据
List<HbmsHouse> list = new LinkedList<HbmsHouse>();
for (ScoreDoc scoreDoc : scoreDocs) {
HbmsHouse hh = new HbmsHouse();
float score = scoreDoc.score; // 相似度
// System.out.println("相似度:"+ score);
// 通过indexSearcher的doc方法取出文档
Document doc = indexSearcher.doc(scoreDoc.doc);

// 获取id
String id = doc.get("id");
if(id == null){
continue;
}
String ngName = doc.get("ngName");
String town = doc.get("town");
String pianQu = doc.get("pianQu");
String switchInType = doc.get("switchInType");
String addressType = doc.get("addressType");
String flag = doc.get("flag");
String causes = doc.get("causes");
String crtTime = doc.get("crtTime");

// 高亮

/*	String idHighlighter = highlighter.getBestFragment(analyzer, "id", id);
String ngNameHighlighter = highlighter.getBestFragment(analyzer, "ngName", ngName);
String townHighlighter = highlighter.getBestFragment(analyzer, "town", town);
String pianQuHighlighter = highlighter.getBestFragment(analyzer, "pianQu", pianQu);
String switchInTypeHighlighter = highlighter.getBestFragment(analyzer, "switchInType", switchInType);
String addressTypeHighlighter = highlighter.getBestFragment(analyzer, "addressType", addressType);
String flagHighlighter = highlighter.getBestFragment(analyzer, "flag", flag);
String causesHighlighter = highlighter.getBestFragment(analyzer, "causes", causes);
String crtTimeHighlighter = highlighter.getBestFragment(analyzer, "crtTime", crtTime);*/

String idHighlighter = null;
String ngNameHighlighter = null;
String townHighlighter = null;
String pianQuHighlighter = null;
String switchInTypeHighlighter = null;
String addressTypeHighlighter = null;
String flagHighlighter = null;
String causesHighlighter = null;
String crtTimeHighlighter = null;
if(StringUtils.isNotBlank(id)){
idHighlighter = highlighter.getBestFragment(analyzer, "id", id);
}
if(StringUtils.isNotBlank(ngName)){
ngNameHighlighter = highlighter.getBestFragment(analyzer, "ngName", ngName);
}
if(StringUtils.isNotBlank(pianQu)){
pianQuHighlighter = highlighter.getBestFragment(analyzer, "pianQu", pianQu);
}
if(StringUtils.isNotBlank(town)){
townHighlighter = highlighter.getBestFragment(analyzer, "town", town);
}

if(StringUtils.isNotBlank(switchInType)){
switchInTypeHighlighter = highlighter.getBestFragment(analyzer, "switchInType", switchInType);
}
if(StringUtils.isNotBlank(addressType)){
addressTypeHighlighter = highlighter.getBestFragment(analyzer, "addressType", addressType);
}
if(StringUtils.isNotBlank(flag)){
flagHighlighter = highlighter.getBestFragment(analyzer, "flag", flag);
}
if(StringUtils.isNotBlank(causes)){
causesHighlighter = highlighter.getBestFragment(analyzer, "causes", causes);
}
if(StringUtils.isNotBlank(crtTime)){
crtTimeHighlighter = highlighter.getBestFragment(analyzer, "crtTime", crtTime);
}

if(idHighlighter == null){
hh.setId(id);
}else{
hh.setId(idHighlighter);
}
if(ngNameHighlighter == null){
hh.setNgName(ngName);
}else{
hh.setNgName(ngNameHighlighter);
}
if(townHighlighter == null){
hh.setTown(town);
}else{
hh.setTown(townHighlighter);
}
if(pianQuHighlighter == null){
hh.setPianQu(pianQu);
}else{
hh.setPianQu(pianQuHighlighter);
}
if(switchInTypeHighlighter == null){
hh.setSwitchInType(switchInType);
}else{
hh.setSwitchInType(switchInTypeHighlighter);
}
if(addressTypeHighlighter == null){
hh.setAddressType(addressType);
}else{
hh.setAddressType(addressTypeHighlighter);
}
if(flagHighlighter == null){
if(flag!= null){
hh.setFlag(Integer.parseInt(flag));
}
}else{
hh.setFlag(Integer.parseInt(flagHighlighter));
}
if(causesHighlighter == null){
hh.setCauses(causes);
}else{
hh.setCauses(causesHighlighter);
}

if (StringUtils.isNotBlank(crtTime)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
Date parse = sdf.parse(crtTime);
hh.setCrtTime(parse);
}

list.add(hh);
}
// 关闭索引查看器
indexReader.close();
long end = System.currentTimeMillis();
System.out.println("结束时间:" + end);
long time = end - start;
System.out.println("用时:" + time + "毫秒");
return list;
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

/**
* 获取指定分词器的分词结果
*
* @param analyzeStr
*            要分词的字符串
* @param analyzer
*            分词器
* @return 分词结果
*/
public static List<String> getAnalyseResult(String analyzeStr, Analyzer analyzer) {
List<String> response = new ArrayList<String>();
TokenStream tokenStream = null;
try {
// 返回适用于fieldName的TokenStream,标记读者的内容。
tokenStream = analyzer.tokenStream("name", new StringReader(analyzeStr));
// 语汇单元对应的文本
CharTermAttribute attr = tokenStream.addAttribute(CharTermAttribute.class);
// 消费者在使用incrementToken()开始消费之前调用此方法。
// 将此流重置为干净状态。 有状态的实现必须实现这种方法,以便它们可以被重用,就像它们被创建的一样。
tokenStream.reset();
// Consumers(即IndexWriter)使用此方法将流推送到下一个令牌。
while (tokenStream.incrementToken()) {
response.add(attr.toString());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (tokenStream != null) {
try {
tokenStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return response;
}
}


3 多字段搜索

import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLEncoder;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import com.rbc.hbms.estateView.entity.HbmsHouse;
import com.tds.framework.wsmanage.util.StringUtils;

/**
* 多字段搜索
* Created by MoSon on 2017/7/5.
*/
public class MultiFieldQuery {

public static List<HbmsHouse> getInfo(String[] fields,String keyword, int number, Map<String, String> map) throws IOException, ParseException {
try {
long start = System.currentTimeMillis();
System.out.println("开始时间:" + start);
Directory directory = FSDirectory.open(new File("D:/EclipseWorkspace/zseboss/standardIndex"));
// 定义索引查看器
IndexReader indexReader = DirectoryReader.open(directory);
// 定义搜索器
IndexSearcher indexSearcher = new IndexSearcher(indexReader);

//定义搜索
BooleanQuery query = new BooleanQuery();

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);
//			String keyword = "229632874 江南街道";
//			String[] fields = new String[] { "ngName", "town", "pianQu" };
BooleanClause.Occur[] flags = new BooleanClause.Occur[fields.length];
/*for (int i = 0; i < fields.length; i++) {
//如果是查询“未录入”就要必须有这个字段
if(fields[i].equals("pianQu") || fields[i].equals("switchinType")
|| fields[i].equals("addressType") || fields[i].equals("flag")){
for(Map.Entry<String, String> field : map.entrySet()){
String key = field.getKey();
if(key!=null){
String value = field.getValue();
Query query2 = new QueryParser(Version.LUCENE_47,key,analyzer).parse(value);
query.add(query2, BooleanClause.Occur.MUST);
}
}
}else{
flags[i] = BooleanClause.Occur.SHOULD;
}
}
Query query1 = MultiFieldQueryParser.parse(Version.LUCENE_47, keyword, fields, flags, analyzer);
query.add(query1, BooleanClause.Occur.SHOULD);
*/
//			 Query query2 = new QueryParser(Version.LUCENE_47,"作者",analyzer).parse("辰东");
// Query query2 = new
// QueryParser(Version.LUCENE_47,"name",analyzer).parse("江门");

for(Map.Entry<String, String> field : map.entrySet()){
String key = field.getKey();
if(key!=null){
String value = field.getValue();
Query query2 = new QueryParser(Version.LUCENE_47,key,analyzer).parse(value);
query.add(query2, BooleanClause.Occur.MUST);
}
}

//			BooleanQuery query = new BooleanQuery();

// query.add(query2, BooleanClause.Occur.SHOULD);

/**定义高亮组件*/
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span style='color:red;'>", "</span>");
// 构建Scorer,用于选取最佳切片
QueryScorer scorer = new QueryScorer(query);
// 实例化Highlighter组件
Highlighter highlighter = new Highlighter(formatter, scorer);
// 构建Fragmenter对象,用于文档切片
highlighter.setTextFragmenter(new SimpleFragmenter(100));
highlighter.setEncoder(new SimpleHTMLEncoder());

// 命中的前10条文档
TopDocs topDocs = indexSearcher.search(query, 20);
// 打印命中数
System.out.println("命中数:" + topDocs.totalHits);

// 取出文档
ScoreDoc[] scoreDocs = topDocs.scoreDocs;

List<HbmsHouse> list = new LinkedList<HbmsHouse>();
for (ScoreDoc scoreDoc : scoreDocs) {
HbmsHouse hh = new HbmsHouse();
// 通过indexSearcher的doc方法取出文档
Document doc = indexSearcher.doc(scoreDoc.doc);
String id = doc.get("id");
if (id == null) {
continue;
}
String ngName = doc.get("ngName");
String town = doc.get("town");
String pianQu = doc.get("pianQu");
String switchInType = doc.get("switchInType");
String addressType = doc.get("addressType");
String flag = doc.get("flag");
String causes = doc.get("causes");
String crtTime = doc.get("crtTime");

String idHighlighter = null;
String ngNameHighlighter = null;
String townHighlighter = null;
String pianQuHighlighter = null;
String switchInTypeHighlighter = null;
String addressTypeHighlighter = null;
String flagHighlighter = null;
String causesHighlighter = null;
String crtTimeHighlighter = null;
// 高亮
if (StringUtils.isNotBlank(id)) {
idHighlighter = highlighter.getBestFragment(analyzer, "id", id);
}
if (StringUtils.isNotBlank(ngName)) {
ngNameHighlighter = highlighter.getBestFragment(analyzer, "ngName", ngName);
}
/*		  if(StringUtils.isNotBlank(pianQu)){
pianQuHighlighter = highlighter.getBestFragment(analyzer, "pianQu", pianQu);
}
if(StringUtils.isNotBlank(town)){
townHighlighter = highlighter.getBestFragment(analyzer, "town", town);
}

if(StringUtils.isNotBlank(switchInType)){
switchInTypeHighlighter = highlighter.getBestFragment(analyzer, "switchInType", switchInType);
}
if(StringUtils.isNotBlank(addressType)){
addressTypeHighlighter = highlighter.getBestFragment(analyzer, "addressType", addressType);
}
if(StringUtils.isNotBlank(flag)){
flagHighlighter = highlighter.getBestFragment(analyzer, "flag", flag);
}
if(StringUtils.isNotBlank(causes)){
causesHighlighter = highlighter.getBestFragment(analyzer, "causes", causes);
}
if(StringUtils.isNotBlank(crtTime)){
crtTimeHighlighter = highlighter.getBestFragment(analyzer, "crtTime", crtTime);
}*/

if(idHighlighter == null){
hh.setId(id);
}else{
hh.setId(idHighlighter);
}
String ngNameValue = map.get("ngName");
if(ngNameHighlighter == null || ngNameValue == null){
hh.setNgName(ngName);
}else{
hh.setNgName(ngNameHighlighter);
}
if(townHighlighter == null){
hh.setTown(town);
}else{
//因为是代码,不能用作高亮
hh.setTown(townHighlighter);
}
if(pianQuHighlighter == null){
hh.setPianQu(pianQu);
}else{
hh.setPianQu(pianQuHighlighter);
}
if(switchInTypeHighlighter == null){
hh.setSwitchInType(switchInType);
}else{
hh.setSwitchInType(switchInTypeHighlighter);
}
if(addressTypeHighlighter == null){
hh.setAddressType(addressType);
}else{
hh.setAddressType(addressTypeHighlighter);
}
if(flagHighlighter == null){
if(flag!= null){
hh.setFlag(Integer.parseInt(flag));
}
}else{
hh.setFlag(Integer.parseInt(flagHighlighter));
}
if(causesHighlighter == null){
hh.setCauses(causes);
}else{
hh.setCauses(causesHighlighter);
}

if (StringUtils.isNotBlank(crtTime)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
Date parse = sdf.parse(crtTime);
hh.setCrtTime(parse);
}
//添加到集合
list.add(hh);
}

// 关闭索引查看器
indexReader.close();

long end = System.currentTimeMillis();
System.out.println("开始时间:" + end);
long time = end - start;
System.out.println("用时:" + time + "毫秒");

return list;
} catch (java.text.ParseException e) {
e.printStackTrace();
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
}
return null;
}


想看入门可以看底部的“我的更多文章”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: