商品搜索
Dao
業務邏輯
1、根據Query對象進行查詢
2、返回查詢結果,包括List、查詢結果的總記錄數
@Repository
public class SearchDao {@Autowired
private SolrServer solrServer;
public SearchResult
search(SolrQuery query) throws Exception{QueryResponse response = solrServer.query(query);SolrDocumentList solrDocumentList = response.getResults();
long numFound = solrDocumentList.getNumFound();SearchResult result =
new SearchResult();result.setRecordCount(numFound);List<SearchItem> itemList =
new ArrayList<>();
for (SolrDocument solrDocument : solrDocumentList) {SearchItem item =
new SearchItem();item.setCategory_name((String) solrDocument.
get(
"item_category_name"));item.setId((String) solrDocument.
get(
"id"));String image = (String) solrDocument.
get(
"item_image");
if (StringUtils.isNotBlank(image)) {image = image.split(
",")[
0];}item.setImage(image);item.setPrice((
long) solrDocument.
get(
"item_price"));item.setSell_point((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 title =
"";
if (list !=
null && list.size() >
0) {title = list.
get(
0);}
else {title = (String) solrDocument.
get(
"item_title");}item.setTitle(title);itemList.add(item);}result.setItemList(itemList);
return result;}
}
Service
業務邏輯
1、創建一個SolrQuery對象
2、設置查詢條件
3、設置分頁條件
4、需要指定默認搜索域
5、設置高亮
6、執行查詢,調用SearchDao。得到SearchResult
7、需要計算總頁數
8、返回SearchResult
@Service
public class SearchServiceImpl implements SearchService {@Autowiredprivate SearchDao searchDao;
@Overridepublic SearchResult
search(String queryString,
int page,
int rows)
throws Exception {SolrQuery query =
new SolrQuery();query.setQuery(queryString);
if (page <
1) page =
1;query.setStart((page -
1) * rows);
if (rows <
1) rows =
10;query.setRows(rows);query.set(
"df",
"item_title");query.setHighlight(
true);query.addHighlightField(
"item_title");query.setHighlightSimplePre(
"<font color='red'>");query.setHighlightSimplePost(
"</font>");SearchResult searchResult = searchDao.search(query);
long recordCount = searchResult.getRecordCount();
long pages = recordCount / rows;
if (recordCount % rows >
0) {pages++;}searchResult.setTotalPages(pages);
return searchResult;}
}
Controller
業務邏輯
1、接收參數
2、調用服務查詢商品列表
3、把查詢結果傳遞給頁面,需要參數回顯
@Controller
public class SearchController {@Autowiredprivate SearchService searchService;
@Value(
"${SEARCH_RESULT_ROWS}")
private Integer SEARCH_RESULT_ROWS;
@RequestMapping(
"/search")
public String
search(@
RequestParam("q") String queryString, @
RequestParam(defaultValue =
"1") Integer page,Model model)
throws Exception {queryString =
new String(queryString.getBytes(
"iso8859-1"),
"utf-8");SearchResult searchResult = searchService.search(queryString, page, SEARCH_RESULT_ROWS);model.addAttribute(
"query", queryString);model.addAttribute(
"totalPages", searchResult.getTotalPages());model.addAttribute(
"itemList", searchResult.getItemList());model.addAttribute(
"page", page);
return "search";}
}
如果,是Dubbo分布式服務
Service需要發布服務
<dubbo:service interface="com.taotao.search.service.SearchService" ref="searchServiceImpl" timeout="300000"/>
Web引用服務
<dubbo:application name="taotao-search-web"/>
<dubbo:registry protocol="zookeeper" address="192.168.25.167:2181"/>
<dubbo:reference interface="com.taotao.search.service.SearchService" id="searchService" />
總結
以上是生活随笔為你收集整理的SolrJ商品搜索实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。