1. solr中关键对象,参数或配置文件
关键字: solrHome,分词器
配置文件: schema.xml:配置字段,字段类型
web.xml:配置solrHme的位置
客户端: solrJ
对象: solrServer,SolrQuery
2. solr的维护:
2.1 solr中中维护包括增,删,改,查,注意solr中没有修改
(1) 向solr 库中添加: public void addDocument() throws Exception { //创建一连接 SolrServer solrServer = new HttpSolrServer("http://192.168.254.130:8080/solr"); //创建一个文档对象 SolrInputDocument document = new SolrInputDocument(); document.addField("id", "test001"); document.addField("item_title", "测试商品2"); document.addField("item_price", 54321); //把文档对象写入索引库 solrServer.add(document); //提交 solrServer.commit(); } (2) 更新: 添加一个id值一样的,就将原来的更新了: public void addDocument() throws Exception { //创建一连接 SolrServer solrServer = new HttpSolrServer("http://192.168.254.130:8080/solr"); //创建一个文档对象 SolrInputDocument document = new SolrInputDocument(); document.addField("id", "test001"); document.addField("item_title", "测试商品3"); document.addField("item_price", 1233333); //把文档对象写入索引库 solrServer.add(document); //提交 solrServer.commit(); }(3)删除: public void deleteDocument() throws Exception { //创建一连接 SolrServer solrServer = new HttpSolrServer("http://192.168.254.130:8080/solr"); //solrServer.deleteById("test001"); solrServer.deleteByQuery("*:*"); solrServer.commit(); }(4)查询:public void queryDocument() throws Exception { SolrServer solrServer = new HttpSolrServer("http://192.168.254.130:8080/solr"); //创建一个查询对象 SolrQuery query = new SolrQuery(); //设置查询条件 query.setQuery("*:*"); query.setStart(20); query.setRows(50); //执行查询 QueryResponse response = solrServer.query(query); //取查询结果 SolrDocumentList solrDocumentList = response.getResults(); System.out.println("共查询到记录:" + solrDocumentList.getNumFound()); for (SolrDocument solrDocument : solrDocumentList) { System.out.println(solrDocument.get("id")); System.out.println(solrDocument.get("item_title")); System.out.println(solrDocument.get("item_price")); System.out.println(solrDocument.get("item_image")); } }
2.2 与spring的整合例子在: taotao-search中 ItemServiceImpl
添加例子
@Servicepublic class ItemServiceImpl implements ItemService{ @Resource private ItemMapper itemMapper; @Resource private SolrServer solrServer; @Override public TaotaoResult importAllItems() { //从数据库中查出商品列表 List- list = itemMapper.getItemList(); //将list中的数据导入到 solr中 try { for(Item item:list){ //创建一个文档对象 SolrInputDocument document = new SolrInputDocument(); document.addField("id", item.getId()); document.addField("item_title", item.getTitle()); document.addField("item_sell_point", item.getSell_point()); document.addField("item_price", item.getPrice()); document.addField("item_image", item.getImage()); document.addField("item_category_name", item.getCategory_name()); //把文档对象写入索引库 solrServer.add(document); } solrServer.commit(); return TaotaoResult.ok(); } catch (Exception e) { e.printStackTrace(); return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e)); } }}
查询例子:
package com.taotao.search.service.impl;import javax.annotation.Resource;import org.apache.solr.client.solrj.SolrQuery;import org.springframework.stereotype.Service;import com.taotao.search.dao.SearchDao;import com.taotao.search.pojo.SearchResult;import com.taotao.search.service.SearchService;@Servicepublic class SearchServiceImpl implements SearchService { @Resource 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_keywords"); // 设置高亮显示 query.setHighlight(true); query.addHighlightField("item_title"); query.setHighlightSimplePre(""); query.setHighlightSimplePost(""); // 执行查询 SearchResult searchResult = searchDao.search(query); // 计算查询结果总页数 long recordCount = searchResult.getRecordCount(); //算法:如果总行数不能被每页行数整除,则在显示页面上加1 long pageCount = recordCount / rows; if (recordCount % rows > 0) { pageCount++; } searchResult.setPageCount(pageCount); searchResult.setCurPage(page); return searchResult; }}
依赖的searchDao代码为:
package com.taotao.search.dao.impl;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import com.taotao.search.dao.SearchDao;import com.taotao.search.pojo.Item;import com.taotao.search.pojo.SearchResult;/** * 商品搜索Dao *Title: SearchDaoImpl
*Description:
*Company:
* @author 杨凯 * @date 2015年9月11日下午3:26:25 * @version 1.0 */@Repositorypublic class SearchDaoImpl implements SearchDao { @Autowired private SolrServer solrServer; @Override public SearchResult search(SolrQuery query) throws Exception { //返回值对象 SearchResult result = new SearchResult(); //根据查询条件查询索引库 QueryResponse queryResponse = solrServer.query(query); //取查询结果 SolrDocumentList solrDocumentList = queryResponse.getResults(); //取查询结果总数量 result.setRecordCount(solrDocumentList.getNumFound()); //商品列表 List- itemList = new ArrayList<>(); //取高亮显示 Map
>> highlighting = queryResponse.getHighlighting(); //取商品列表 for (SolrDocument solrDocument : solrDocumentList) { //创建一商品对象 Item item = new Item(); item.setId(Long.parseLong((String)solrDocument.get("id")) ); //取高亮显示的结果 List list = highlighting.get(solrDocument.get("id")).get("item_title"); String title = ""; if (list != null && list.size()>0) { title = list.get(0); } else { title = (String) solrDocument.get("item_title"); } item.setTitle(title); item.setImage((String) solrDocument.get("item_image")); item.setPrice((long) solrDocument.get("item_price")); //设置卖点 item.setSell_point((String) solrDocument.get("item_sell_point")); //商品分类 item.setCategory_name((String) solrDocument.get("item_category_name")); //添加的商品列表 itemList.add(item); } result.setItemList(itemList); return result; }}