solr使用代码实例
solr在搜索领域还是挺出名的一枚,最近断断续续的在看这部分,理论的东西先不说,上盘代码记录一下:
- spring配置文件
<!--单机版solr客户端-->
<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
<constructor-arg name="baseURL" value="http://192.168.6.57:8983/solr/core2"/>
</bean>
- Controller
@Autowired
private SearchService searchService;
@RequestMapping("/q")
@ResponseBody
public TaotaoResult search(@RequestParam(defaultValue = "")String keyword,
@RequestParam(defaultValue = "1")Integer page,
@RequestParam(defaultValue = "30")Integer rows) {
//转字符串
try {
keyword = new String(keyword.getBytes("iso8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
SearchResult searchResult = null;
try {
searchResult = searchService.search(keyword,page,rows);
} catch (Exception e) {
e.printStackTrace();
return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
}
return TaotaoResult.ok(searchResult);
}
- Service实现
@Service
public class SearchServiceImpl implements SearchService {
@Autowired
private SearchDao searchDao;
@Override
public SearchResult search(String queryString, int page, int rows) throws Exception {
//创建查询条件
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery(queryString);
//设置分页条件
query.setStart((page-1)*rows);
query.setRows(rows);
//设置默认搜索域
query.set("df", "item_title");
//设置高亮
query.setHighlight(true);
query.addHighlightField("item_title");
query.setHighlightSimplePre("<font class=\"skcolor_ljg\">");
query.setHighlightSimplePost("</font>");
//query.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
//query.setHighlightSimplePost("</font>");//后缀
//执行查询
SearchResult searchResult = searchDao.search(query);
//计算总页数
Long recordCount = searchResult.getRecordCount();
int pageCount = (int) (recordCount / rows);
if (recordCount % rows > 0) {
pageCount++;
}
searchResult.setPageCount(pageCount);
searchResult.setCurPage(page);
return searchResult;
}
}
- *Dao实现
@Repository
public class SearchDaoImpl implements SearchDao {
@Autowired
private SolrServer solrServer;
@Override
public SearchResult search(SolrQuery query) throws Exception {
//执行查询
QueryResponse response = solrServer.query(query);
//取查询结果列表
SolrDocumentList solrDocumentList = response.getResults();
List<SearchItem> itemList = new ArrayList<>();
for (SolrDocument solrDocument : solrDocumentList) {
//创建一个SearchItem对象
SearchItem item = new SearchItem();
item.setNameCategoryName((String) solrDocument.get("item_category_name"));
item.setId((String) solrDocument.get("id"));
item.setImage((String) solrDocument.get("item_image"));
item.setPrice((Long) solrDocument.get("item_price"));
item.setSellPoint((String) solrDocument.get("item_sell_point"));
//取高亮显示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
String itemTitle = "";
if (list != null && list.size() > 0) {
//取高亮后的结果
itemTitle = list.get(0);
} else {
itemTitle = (String) solrDocument.get("item_title");
}
item.setTitle(itemTitle);
//添加到列表
itemList.add(item);
}
SearchResult result = new SearchResult();
result.setItemList(itemList);
//查询结果总数量
result.setRecordCount(solrDocumentList.getNumFound());
return result;
}
}
- *测试类
@Test
public void testSolrJ() {
//创建连接
SolrServer solrServer = new HttpSolrServer("http://192.168.6.57:8983/solr/core2");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
//添加域
document.addField("id","solrtest01");
document.addField("item_title","测试商品");
document.addField("item_sell_point","买点");
//添加到索引库
try {
solrServer.add(document);
//提交
solrServer.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testQuery(){
SolrServer solrServer = new HttpSolrServer("http://192.168.6.57:8983/solr/core2");
//创建一查询对象
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
//执行查询
try {
QueryResponse response = solrServer.query(query);
SolrDocumentList solrDocumentsList = response.getResults();
for (SolrDocument solrdocument:solrDocumentsList){
System.out.println(solrdocument.get("id"));
System.out.println(solrdocument.get("item_title"));
System.out.println(solrdocument.get("item_sell_point"));
}
} catch (SolrServerException e) {
e.printStackTrace();
}
}