public static SearchResult search(SolrQuery query) throws SolrServerException {
SearchResult searchResult = new SearchResult();
//创建SolrServer
SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8080/solr");
//创建一个SolrQuery对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery(keyword);
if(page <= 0) page = 1;
int start = (page - 1) * row;
query.setStart(start); //设置分页:起始页
query.setRows(row); //设置分页:页面大小
query.set("df", "item_title"); //设置默认搜索域,若不指定默认搜索域,默认从text中找
query.setHighlight(true); //开启高亮
query.addHighlightField("item_title"); //设置高亮的域
query.setHighlightSimplePre("<em style=\"color:red\">"); //设置高亮的前缀
query.setHighlightSimplePost("</em>"); //设置高亮的后缀
//执行查询
QueryResponse queryResponse = solrServer.query(query);
//取文档列表,取查询结果总记录数
SolrDocumentList results = queryResponse.getResults();
long num = results.getNumFound();
searchResult.setRecourdCount(num);
List<SearchItem> list = new ArrayList<>();
//取高亮
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
//遍历文档列表,从中取出域的内容
for (SolrDocument solrDocument : results) {
SearchItem item = new SearchItem();
item.setId((String) solrDocument.get("id"));
item.setCategory_name((String) solrDocument.get("item_category_name"));
item.setImage((String) solrDocument.get("item_image"));
item.setSell_point((String) solrDocument.get("item_sell_point"));
item.setPrice((long) solrDocument.get("item_price"));
//取高亮显示
List<String> list2 = highlighting.get(solrDocument.get("id")).get("item_title");
String title = "";
if(list2 != null && list2.size() > 0) {
title = list2.get(0);
}else {
title = (String) solrDocument.get("item_title");
}
item.setTitle(title);
list.add(item);
}
searchResult.setItemList(list);
return searchResult;
}
public class SearchResult implements Serializable{
private long recourdCount;
private int totalPages;
List<SearchItem> itemList;
public long getRecourdCount() {
return recourdCount;
}
public void setRecourdCount(long recourdCount) {
this.recourdCount = recourdCount;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public List<SearchItem> getItemList() {
return itemList;
}
public void setItemList(List<SearchItem> itemList) {
this.itemList = itemList;
}
public SearchResult() {
super();
// TODO Auto-generated constructor stub
}
public SearchResult(long recourdCount, int totalPages, List<SearchItem> itemList) {
super();
this.recourdCount = recourdCount;
this.totalPages = totalPages;
this.itemList = itemList;
}
@Override
public String toString() {
return "SearchResult [recourdCount=" + recourdCount + ", totalPages=" + totalPages + ", itemList=" + itemList
+ "]";
}