1. 依赖的jar 包+ jdk 1.8以上, 如果少包或者jdk 版本不对,启动就报错了。
![](https://img-blog.csdn.net/20170810160127489?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIwNjkwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. 检索类
public class SearchSolrService{
public static HttpSolrClient solrServer;
private static Logger logger = LoggerFactory.getLogger(SearchSolrService.class);
static {
solrServer = new HttpSolrClient(PortalConfig.SEARCH_TEXT_URL);
solrServer.setConnectionTimeout(5000);
}
/**
* 全文检索
* @author guosidi
* @date 2017年8月4日 下午3:30:20
* @return
* @return Map<String,Object>
*/
public Map<String, Object> solrSearch( ){
Map<String, Object> map = new HashMap<String, Object>();
List<String> searchParam = new ArrayList<String>(); // 全文检索的内容
searchParam.add("检索列 :" +" value值");
SolrQuery query = new SolrQuery();
if(searchParam.size() == 0){
query.set("q", "*:*"); // 所有的内容, 这时摘要无法提取
}else{
query.set("q", StringUtils.join(searchParam, " AND ")); // 注意AND前后有空格
}
query.set("defType", "edismax"); // 相似度在80%以上
query.set("mm", "80%");
// 开启高亮组件
query.setHighlight(true).setHighlightSnippets(1);
query.addHighlightField("text");// 高亮字段
query.addHighlightField("ca_title");// 高亮字段
//标记,高亮关键字前缀 后缀
query.setHighlightSimplePre("<font color='red'>");
query.setHighlightSimplePost("</font>");
query.setHighlightFragsize(100); // 每个分片的最大长度,默认为100。
//获取查询结果
try {
QueryResponse response = solrServer.query(query);
//查询得到文档的集合
SolrDocumentList solrDocumentList = response.getResults();
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
System.out.println("通过文档集合获取查询的结果");
System.out.println("查询结果的总数量:" + solrDocumentList.getNumFound());
//遍历列表
List<CatalogExt> rows = new ArrayList<CatalogExt>();
for (SolrDocument doc : solrDocumentList) {
CatalogExt ext = new CatalogExt(); // 实体类
ext.setCataId((String) doc.get("id"));
if(doc.containsKey("ca_title")){
ext.setCaTitle((String)doc.get("ca_title"));
}
if(doc.containsKey("img_url")){
ext.setImgUrl((String) doc.get("img_url"));
}
if(doc.containsKey("create_time")){
ext.setCreateTime(new Date(Long.parseLong(doc.get("create_time").toString())));
}
if(doc.containsKey("res_type")){
ext.setResType((String) doc.get("res_type"));
}
if(doc.containsKey("keyword")){
ext.setKeyword((String) doc.get("keyword"));
}
// 获取高亮和摘要
List<String> hlRows = highlighting.get(doc.get("id")).get("text");
if(hlRows!= null && hlRows.size() !=0){
ext.setDescription(hlRows.get(0));
}
List<String> hlTitleRows = highlighting.get(doc.get("id")).get