一.创建索引:
1.在前台页面添加一个"重建索引"按钮
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>列表页面</title>
</head>
<body>
<div style="text-align: center;"><h1>职位信息</h1></div>
<table border="1" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td colspan="3" >
<a href="<s:url action="jobApply_edit" />">添加</a></td>
<td colspan="3" >
<a href="<s:url action="jobApply_createIndex" />">创建索引</a></td>
<td colspan="2" >
<a href="<s:url action="jobApplySearch" />">查询</a></td>
</tr>
<tr>
<td width="10">ID</td>
<td width="200">标题</td>
<td width="400">内容</td>
<td width="150">公司</td>
<td width="100">公司类型</td>
<td width="200">行业</td>
<td width="120">工作地点</td>
<td width="200">薪水范围</td>
<td width="200">操作</td>
</tr>
<s:iterator value="jobApplys">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="title"/></td>
<td><s:property value="content"/></td>
<td><s:property value="company.name"/></td>
<td><s:property value="company.companyType.name"/></td>
<td><s:property value="trade.name"/></td>
<td><s:property value="city.name"/></td>
<td><s:property value="salaryLevel.name"/></td>
<td>
<a href="<s:url action="jobApply_edit"><s:param name="id" value="id"/></s:url>">修改</a>
<a href="<s:url action="jobApply_delete"><s:param name="id" value="id"/></s:url>">删除</a>
</td>
</tr>
</s:iterator>
</table>
</body>
</html>
2.点击"重建索引"后,调用后台方法
package cn.itsource.job.web.action;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import cn.itsource.job.domain.City;
import cn.itsource.job.domain.Company;
import cn.itsource.job.domain.JobApply;
import cn.itsource.job.domain.SalaryLevel;
import cn.itsource.job.domain.Trade;
import cn.itsource.job.service.ICityService;
import cn.itsource.job.service.ICompanyService;
import cn.itsource.job.service.IJobApplyService;
import cn.itsource.job.service.ISalaryLevelService;
import cn.itsource.job.service.ITradeService;
public class JobApplyAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private JobApply jobApply;
private Long id;
private List<JobApply> jobApplys;
private List<Company> companys;
private List<City> citys;
private List<Trade> trades;
private List<SalaryLevel> salayLevels;
private IJobApplyService service;
private ICityService cityService;
private ITradeService tradeService;
private ICompanyService companyService;
private ISalaryLevelService salaryLevelService;
/*************************和索引相关的***********************************/
//创建索引createIndex
public String createIndex() {
//获取需要创建索引的数据库数据
List<JobApply> listJobApplys =service.listJobApplys();
System.out.println(listJobApplys.size());
//使用查询创建索引
service.createIndex(listJobApplys);
return SUCCESS;
}
/*************************和索引相关的***********************************/
public String view() {
jobApply = service.getJobApply(id);
return "view";
}
public String list() {
this.jobApplys = this.service.listJobApplys();
return "list";
}
public String edit() {
citys = cityService.listCitys();
trades = tradeService.listTrades();
salayLevels = salaryLevelService.listSalaryLevels();
companys = companyService.listCompanys();
if (id != null)
this.jobApply = this.service.getJobApply(id);
return INPUT;
}
public String update() {
if (this.jobApply.getId() != null)
this.service.updateJobApply(jobApply);
else
this.service.saveJobApply(jobApply);
return SUCCESS;
}
public String delete() {
if (this.id != null) {
this.service.deleteJobApply(id);
}
return SUCCESS;
}
public JobApply getJobApply() {
return jobApply;
}
public void setJobApply(JobApply JobApply) {
this.jobApply = JobApply;
}
public List<JobApply> getJobApplys() {
return jobApplys;
}
public void setJobApplys(List<JobApply> JobApplys) {
this.jobApplys = JobApplys;
}
public void setId(Long id) {
this.id = id;
}
public void setService(IJobApplyService service) {
this.service = service;
}
public List<Company> getCompanys() {
return companys;
}
public List<City> getCitys() {
return citys;
}
public List<Trade> getTrades() {
return trades;
}
public List<SalaryLevel> getSalayLevels() {
return salayLevels;
}
public void setCityService(ICityService cityService) {
this.cityService = cityService;
}
public void setTradeService(ITradeService tradeService) {
this.tradeService = tradeService;
}
public void setCompanyService(ICompanyService companyService) {
this.companyService = companyService;
}
public void setSalaryLevelService(ISalaryLevelService salaryLevelService) {
this.salaryLevelService = salaryLevelService;
}
}
3.把数据源封装为Document对象
3.1后台:查询需要创建索引的对象
3.2后台:遍历这些对象,封装成Document对象
3.1.1service层实现类(接口略)
4.创建索引写入器IndexWriter
5.后台:通过indexWriter把创建好的Document对象添加到索引库
package cn.itsource.job.service.impl;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.apache.lucene.search.Query;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import cn.itsource.job.dao.IJobApplyDAO;
import cn.itsource.job.domain.JobApply;
import cn.itsource.job.helper.JobApplyIndexHelper;
import cn.itsource.job.query.JobApplyQuery;
import cn.itsource.job.service.IJobApplyService;
@Transactional(propagation = Propagation.REQUIRED)
public class JobApplyServiceImpl implements IJobApplyService {
private IJobApplyDAO dao;
public void setDao(IJobApplyDAO dao) {
this.dao = dao;
}
@Override
public void saveJobApply(JobApply d) {
this.dao.save(d);
}
@Override
public void updateJobApply(JobApply d) {
this.dao.update(d);
}
@Override
public void deleteJobApply(Serializable id) {
this.dao.delete(id);
}
@Override
@Transactional(readOnly = true)
public JobApply getJobApply(Serializable id) {
return this.dao.get(id);
}
@Override
@Transactional(readOnly = true)
public List<JobApply> listJobApplys() {
return this.dao.list();
}
/************创建索引*************/
@Override
public void createIndex(List<JobApply> listJobApplys) {
new JobApplyIndexHelper().createIndex(listJobApplys);
}
/************创建索引*************/
@Override
public List<Map<String, Object>> search(JobApplyQuery qo) {
Query query = qo.getQuery();
List<Map<String, Object>> result=new JobApplyIndexHelper().createSearch(query);
return result;
}
}
3.1.2代码实现(附 高亮.)
package cn.itsource.job.helper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import cn.itsource.job.domain.City;
import cn.itsource.job.domain.Company;
import cn.itsource.job.domain.JobApply;
import cn.itsource.job.domain.SalaryLevel;
import cn.itsource.job.domain.Trade;
import cn.itsource.job.util.LuceneUtil;
/**
* jobApply 相关的索引都放这里
* @author Administrator
*/
public class JobApplyIndexHelper {
/**
* 创建索引
* @param listJobApplys
*/
private IndexWriter indexWriter=null;
public void createIndex(List<JobApply> listJobApplys) {
try {
//1.获取数据源 List<JobApply> listJobApplys 已经完成
//2.获取索引器
indexWriter = LuceneUtil.INSTANCE.getIndexWriter();
//3.吧数据转换为dicument提交到数据库
//3.1创建之前清空
indexWriter.deleteAll();
indexWriter.commit();
//3.2添加到缓冲区
for (JobApply jobApply : listJobApplys) {
Document doc = getDocument(jobApply);
indexWriter.addDocument(doc);
}
indexWriter.commit();
} catch (IOException e) {
e.printStackTrace();
}
}
//3.吧数据转换为document提交到数据库
@SuppressWarnings("null")
private Document getDocument(JobApply jobApply) {
Document doc=new Document();
doc.add(new StringField("id", jobApply.getId().toString(), Store.YES));
//TextField需要分词
doc.add(new TextField("title", jobApply.getTitle().toString(), Store.YES));
doc.add(new StringField("content", jobApply.getContent().toString(), Store.YES));
Company company = jobApply.getCompany();
if (company!=null) {
doc.add(new StringField("company",company.getName(), Store.YES));
}
City city = jobApply.getCity();
if (city!=null) {
doc.add(new StringField("city",city.getName(), Store.YES));
}
SalaryLevel salaryLevel=jobApply.getSalaryLevel();
if (salaryLevel==null) {
doc.add(new StringField("salaryLevel", jobApply.getSalaryLevel().toString(), Store.YES));
}
Trade trade = jobApply.getTrade();
if (trade==null) {
doc.add(new StringField("trade", trade.getName(), Store.YES));
}
return doc;
}
/**
* 做高亮处理:
* 1.先得到高亮器
* 2.对结果进行高亮处理
*/
public List<Map<String, Object>> createSearch(Query query) {
List<Map<String, Object>> result=new ArrayList<>();
try {
//1/将查询条件封装为Query对象
//2.创建查询器
IndexSearcher indexSearcher=LuceneUtil.INSTANCE.getIndexSearcher();
//3.做查询
TopDocs docs = indexSearcher.search(query, 100000);
//设置前缀+后缀
Formatter formatter=new SimpleHTMLFormatter("<font style='color:red'>","</font>");
//记录器
Scorer fragmentScorer=new QueryScorer(query);
Highlighter highlighter = new Highlighter(formatter, fragmentScorer);
//设置高亮器的属性
Fragmenter fragmenter=new SimpleFragmenter(50);//截取的字段长度
highlighter.setTextFragmenter(fragmenter);
System.out.println("3333333333333"+highlighter);
//4.封装结果
ScoreDoc[] docs2 = docs.scoreDocs;
for (ScoreDoc scoreDoc : docs2) {
int docID = scoreDoc.doc;
Document doc = indexSearcher.doc(docID);
System.out.println(docID+"="+doc);
//把文档对象转换为Map
result.add(result2map(doc,highlighter));
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private Map<String, Object> result2map(Document doc, Highlighter highlighter) {
Map<String, Object> map=new HashMap<>();
map.put("id", doc.get("id"));
try {
String title = doc.get("title");
//对Title和Content进行高亮处理
String titleTmp = highlighter.getBestFragment(LuceneUtil.INSTANCE.getAnalyzer(), "title", title);
if (null == titleTmp) {
System.out.println("555555"+titleTmp);
titleTmp = title;
}
String content = doc.get("content");
/*String contentTmp = highlighter.getBestFragment(LuceneUtil.INSTANCE.getAnalyzer(), "content", content);
if (null == contentTmp) {
contentTmp = content;
}
*/
map.put("title", title);
map.put("content", content);
} catch (Exception e) {
e.printStackTrace();
}
map.put("company", doc.get("company"));
map.put("city", doc.get("city"));
return map;
}
}
工具类实现:
package cn.itsource.job.util;
import java.io.IOException;
import java.nio.file.Paths;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.wltea.analyzer.lucene.IKAnalyzer;
/**
* 抽取索引的操作
* @author Administrator
*
*/
public enum LuceneUtil {
INSTANCE;
//通过lisener获取真实路径
private String indexPath=Global.webAppPath+"index";
private IndexWriter indexWriter;
private Analyzer analyzer;
/**
* 获取索引器
*/
public IndexWriter getIndexWriter(){
try {
if (indexWriter==null) {
synchronized (INSTANCE) {
if (indexWriter==null) {
if (analyzer==null) {
analyzer=new IKAnalyzer();
}
IndexWriterConfig conf = new IndexWriterConfig(analyzer);
Directory directory = FSDirectory.open(Paths.get(indexPath));
//1.创建索引器 需要两个条件 directory(目录) IndexWriterConfig(配置信息)
indexWriter=new IndexWriter(directory, conf);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return indexWriter;
}
public Analyzer getAnalyzer() {
if (analyzer==null) {
analyzer=new IKAnalyzer();
}
return analyzer;
}
public IndexSearcher getIndexSearcher() {
try {
IndexReader indexReader=DirectoryReader.open(FSDirectory.open(Paths.get(indexPath)));
IndexSearcher searcher = new IndexSearcher(indexReader);
return searcher;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
二.搜索索引
1.创建搜索页面,并且提供"搜索"按钮
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<script type="text/javascript">
function goPage(page) {
document.getElementById("currentPage").value = page;//
document.forms[0].submit();
}
function selectChanged() {
document.getElementById("currentPage").value = 1;
}
</script>
</head>
<body>
<s:form action="jobApplySearch_search">
<s:hidden name="qo.currentPage" value="%{qo.currentPage}"
id="currentPage" />
<s:textfield name="qo.keyWords" value="%{qo.keyWords}" label="关键字" />
<s:select name="qo.city" list="citys" label="工作城市" listKey="name"
listValue="name" headerKey="-1" headerValue="-----"
οnchange="selectChanged();" />
<s:select name="qo.trade" list="trades" label="工作行业" listKey="name"
listValue="name" headerKey="-1" headerValue="-----"
οnchange="selectChanged();" />
<s:select name="qo.salayLevel" list="salayLevels" label="薪水级别"
listKey="name" listValue="name" headerKey="-1" headerValue="-----"
οnchange="selectChanged();" />
<s:select name="qo.company" list="companys" label="公司名称"
listKey="name" listValue="name" headerKey="-1" headerValue="-----"
οnchange="selectChanged();" />
<s:submit value="提交" />
</s:form>
<hr size='5' color='gray' />
<!-- 修改页面 -->
<s:iterator value="results">
<!--一条数据就是一个div -->
<div style="margin-bottom: 10px">
<!-- 展示标题 --><!--escapeHtml="false" 不识别html ,取值为false则为识别 -->
<div><a href="#"><s:property value="title" escapeHtml="false"/></a></div>
<!--展示公司名称+城市 -->
<div style="margin: 5px 0;color: gray;"><s:property value="company"/>-<s:property value="city"/></div>
<!-- 展示内容 -->
<div><s:property value="content"/>---------------- </div>
</div>
</s:iterator>
</body>
</html>
2.点击"搜索"后,提交搜索参数
package cn.itsource.job.web.action;
import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
import cn.itsource.job.domain.City;
import cn.itsource.job.domain.Company;
import cn.itsource.job.domain.JobApply;
import cn.itsource.job.domain.SalaryLevel;
import cn.itsource.job.domain.Trade;
import cn.itsource.job.query.JobApplyQuery;
import cn.itsource.job.service.ICityService;
import cn.itsource.job.service.ICompanyService;
import cn.itsource.job.service.IJobApplyService;
import cn.itsource.job.service.ISalaryLevelService;
import cn.itsource.job.service.ITradeService;
public class JobApplySearchAction extends ActionSupport{
private List<JobApply> jobApplys;
private List<Company> companys;
private List<City> citys;
private List<Trade> trades;
private List<SalaryLevel> salayLevels;
private IJobApplyService service;
private ICityService cityService;
private ITradeService tradeService;
private ICompanyService companyService;
private ISalaryLevelService salaryLevelService;
//查询条件
private JobApplyQuery qo;
private List<Map<String, Object>> results=null;
//jobApplySearch
//将数据展示到前台
@Override
public String execute() throws Exception {
citys= cityService.listCitys();
trades = tradeService.listTrades();
companys = companyService.listCompanys();
salayLevels = salaryLevelService.listSalaryLevels();
return SUCCESS;
}
//查询页面 要带查询结果
public String search() throws Exception {
citys= cityService.listCitys();
trades = tradeService.listTrades();
companys = companyService.listCompanys();
salayLevels = salaryLevelService.listSalaryLevels();
//查询
results=service.search(qo);
return SUCCESS;
}
public List<Map<String, Object>> getResults() {
return results;
}
public void setResults(List<Map<String, Object>> results) {
this.results = results;
}
public JobApplyQuery getQo() {
return qo;
}
public void setQo(JobApplyQuery qo) {
this.qo = qo;
}
public List<JobApply> getJobApplys() {
return jobApplys;
}
public void setJobApplys(List<JobApply> jobApplys) {
this.jobApplys = jobApplys;
}
public List<Company> getCompanys() {
return companys;
}
public void setCompanys(List<Company> companys) {
this.companys = companys;
}
public List<City> getCitys() {
return citys;
}
public void setCitys(List<City> citys) {
this.citys = citys;
}
public List<Trade> getTrades() {
return trades;
}
public void setTrades(List<Trade> trades) {
this.trades = trades;
}
public List<SalaryLevel> getSalayLevels() {
return salayLevels;
}
public void setSalayLevels(List<SalaryLevel> salayLevels) {
this.salayLevels = salayLevels;
}
public IJobApplyService getService() {
return service;
}
public void setService(IJobApplyService service) {
this.service = service;
}
public ICityService getCityService() {
return cityService;
}
public void setCityService(ICityService cityService) {
this.cityService = cityService;
}
public ITradeService getTradeService() {
return tradeService;
}
public void setTradeService(ITradeService tradeService) {
this.tradeService = tradeService;
}
public ICompanyService getCompanyService() {
return companyService;
}
public void setCompanyService(ICompanyService companyService) {
this.companyService = companyService;
}
public ISalaryLevelService getSalaryLevelService() {
return salaryLevelService;
}
public void setSalaryLevelService(ISalaryLevelService salaryLevelService) {
this.salaryLevelService = salaryLevelService;
}
}
3.后台,接收查询条件,封装到查询对象(javabean)
4.后台,把查询条件传入"service"完成查询
/************查询*************/
@Override
public List<Map<String, Object>> search(JobApplyQuery qo) {
Query query = qo.getQuery();
List<Map<String, Object>> result=new JobApplyIndexHelper().createSearch(query);
return result;
}
/************查询*************/
4.1.使用"查询对象"产出Lucene的Query对象
4.2.使用Query完成Lucene索引库的查询
5.后台,吧结果封装,返回
package cn.itsource.job.helper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import cn.itsource.job.domain.City;
import cn.itsource.job.domain.Company;
import cn.itsource.job.domain.JobApply;
import cn.itsource.job.domain.SalaryLevel;
import cn.itsource.job.domain.Trade;
import cn.itsource.job.util.LuceneUtil;
/**
* jobApply 相关的索引都放这里
* @author Administrator
*/
public class JobApplyIndexHelper {
/**
* 创建索引
* @param listJobApplys
*/
private IndexWriter indexWriter=null;
public void createIndex(List<JobApply> listJobApplys) {
try {
//1.获取数据源 List<JobApply> listJobApplys 已经完成
//2.获取索引器
indexWriter = LuceneUtil.INSTANCE.getIndexWriter();
//3.吧数据转换为dicument提交到数据库
//3.1创建之前清空
indexWriter.deleteAll();
indexWriter.commit();
//3.2添加到缓冲区
for (JobApply jobApply : listJobApplys) {
Document doc = getDocument(jobApply);
indexWriter.addDocument(doc);
}
indexWriter.commit();
} catch (IOException e) {
e.printStackTrace();
}
}
//3.吧数据转换为document提交到数据库
@SuppressWarnings("null")
private Document getDocument(JobApply jobApply) {
Document doc=new Document();
doc.add(new StringField("id", jobApply.getId().toString(), Store.YES));
//TextField需要分词
doc.add(new TextField("title", jobApply.getTitle().toString(), Store.YES));
doc.add(new StringField("content", jobApply.getContent().toString(), Store.YES));
Company company = jobApply.getCompany();
if (company!=null) {
doc.add(new StringField("company",company.getName(), Store.YES));
}
City city = jobApply.getCity();
if (city!=null) {
doc.add(new StringField("city",city.getName(), Store.YES));
}
SalaryLevel salaryLevel=jobApply.getSalaryLevel();
if (salaryLevel==null) {
doc.add(new StringField("salaryLevel", jobApply.getSalaryLevel().toString(), Store.YES));
}
Trade trade = jobApply.getTrade();
if (trade==null) {
doc.add(new StringField("trade", trade.getName(), Store.YES));
}
return doc;
}
/**
* 做高亮处理:
* 1.先得到高亮器
* 2.对结果进行高亮处理
*/
public List<Map<String, Object>> createSearch(Query query) {
List<Map<String, Object>> result=new ArrayList<>();
try {
//1/将查询条件封装为Query对象
//2.创建查询器
IndexSearcher indexSearcher=LuceneUtil.INSTANCE.getIndexSearcher();
//3.做查询
TopDocs docs = indexSearcher.search(query, 100000);
//设置前缀+后缀
Formatter formatter=new SimpleHTMLFormatter("<font style='color:red'>","</font>");
//记录器
Scorer fragmentScorer=new QueryScorer(query);
Highlighter highlighter = new Highlighter(formatter, fragmentScorer);
//设置高亮器的属性
Fragmenter fragmenter=new SimpleFragmenter(50);//截取的字段长度
highlighter.setTextFragmenter(fragmenter);
System.out.println("3333333333333"+highlighter);
//4.封装结果
ScoreDoc[] docs2 = docs.scoreDocs;
for (ScoreDoc scoreDoc : docs2) {
int docID = scoreDoc.doc;
Document doc = indexSearcher.doc(docID);
System.out.println(docID+"="+doc);
//把文档对象转换为Map
result.add(result2map(doc,highlighter));
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private Map<String, Object> result2map(Document doc, Highlighter highlighter) {
Map<String, Object> map=new HashMap<>();
map.put("id", doc.get("id"));
try {
String title = doc.get("title");
//对Title和Content进行高亮处理
String titleTmp = highlighter.getBestFragment(LuceneUtil.INSTANCE.getAnalyzer(), "title", title);
if (null == titleTmp) {
System.out.println("555555"+titleTmp);
titleTmp = title;
}
String content = doc.get("content");
/*String contentTmp = highlighter.getBestFragment(LuceneUtil.INSTANCE.getAnalyzer(), "content", content);
if (null == contentTmp) {
contentTmp = content;
}
*/
map.put("title", title);
map.put("content", content);
} catch (Exception e) {
e.printStackTrace();
}
map.put("company", doc.get("company"));
map.put("city", doc.get("city"));
return map;
}
}
三.高亮处理
1.导包:
lucene-highlighter-5.5.0.jar
lucene-memory-5.5.0.jar
2.创建高亮器
源码地址:http://download.csdn.net/detail/gs932899178/9719072
------------------------------------------------------------附文件原版--------------------------------------------