日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SolrJ商品搜索实现

發(fā)布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SolrJ商品搜索实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

商品搜索

Dao

業(yè)務(wù)邏輯
1、根據(jù)Query對象進行查詢
2、返回查詢結(jié)果,包括List、查詢結(jié)果的總記錄數(shù)

@Repository public class SearchDao {@Autowiredprivate SolrServer solrServer;public SearchResult search(SolrQuery query) throws Exception{//根據(jù)query對象進行查詢QueryResponse response = solrServer.query(query);//取查詢結(jié)果SolrDocumentList solrDocumentList = response.getResults();//取查詢結(jié)果總記錄數(shù)long numFound = solrDocumentList.getNumFound();SearchResult result = new SearchResult();result.setRecordCount(numFound);List<SearchItem> itemList = new ArrayList<>();//把查詢結(jié)果封裝到SearchItem對象中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);}//把結(jié)果添加到SearchResult中result.setItemList(itemList);//返回return result;} }

Service

業(yè)務(wù)邏輯
1、創(chuàng)建一個SolrQuery對象
2、設(shè)置查詢條件
3、設(shè)置分頁條件
4、需要指定默認(rèn)搜索域
5、設(shè)置高亮
6、執(zhí)行查詢,調(diào)用SearchDao。得到SearchResult
7、需要計算總頁數(shù)
8、返回SearchResult

@Service public class SearchServiceImpl implements SearchService {@Autowiredprivate SearchDao searchDao;@Overridepublic SearchResult search(String queryString, int page, int rows) throws Exception {//根據(jù)查詢條件拼裝查詢對象//創(chuàng)建一個SolrQuery對象SolrQuery query = new SolrQuery();//設(shè)置查詢條件query.setQuery(queryString);//設(shè)置分頁條件if (page < 1) page =1;query.setStart((page - 1) * rows);if (rows < 1) rows = 10;query.setRows(rows);//設(shè)置默認(rèn)搜索域query.set("df", "item_title");//設(shè)置高亮顯示query.setHighlight(true);query.addHighlightField("item_title");query.setHighlightSimplePre("<font color='red'>");query.setHighlightSimplePost("</font>");//調(diào)用dao執(zhí)行查詢SearchResult searchResult = searchDao.search(query);//計算查詢結(jié)果的總頁數(shù)long recordCount = searchResult.getRecordCount();long pages = recordCount / rows;if (recordCount % rows > 0) {pages++;}searchResult.setTotalPages(pages);//返回結(jié)果return searchResult;} }

Controller

業(yè)務(wù)邏輯
1、接收參數(shù)
2、調(diào)用服務(wù)查詢商品列表
3、把查詢結(jié)果傳遞給頁面,需要參數(shù)回顯

@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 {// int a = 1/0;// 調(diào)用服務(wù)執(zhí)行查詢// 把查詢條件進行轉(zhuǎn)碼,解決get亂碼問題queryString = new String(queryString.getBytes("iso8859-1"), "utf-8");SearchResult searchResult = searchService.search(queryString, page, SEARCH_RESULT_ROWS);// 把結(jié)果傳遞給頁面model.addAttribute("query", queryString);model.addAttribute("totalPages", searchResult.getTotalPages());model.addAttribute("itemList", searchResult.getItemList());model.addAttribute("page", page);// 返回邏輯視圖return "search";} }

如果,是Dubbo分布式服務(wù)
Service需要發(fā)布服務(wù)

<!-- 聲明需要暴露的服務(wù)接口 --> <dubbo:service interface="com.taotao.search.service.SearchService" ref="searchServiceImpl" timeout="300000"/>

Web引用服務(wù)

<!-- 引用dubbo服務(wù) --> <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" />

總結(jié)

以上是生活随笔為你收集整理的SolrJ商品搜索实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。