一、在solr中插入数据
|
{ "id": 536563, "tb_item_cid": 560, "tb_item_cname": "手机", "tb_item_title": "new2 - 阿尔卡特 (OT-927) 炭黑 联通3G手机 双卡双待", "tb_item_sell_point": "清仓!仅北京,武汉仓有货!" } |
在solr中插入的数据,这些数据的字段都需要在solr中进行“注册”,被“注册”过的字段,就可以支持分词,因此这些数据就可以被查询。
1.在solr中“注册”字段
1)搜索出来以后的数据是什么样的,这样的数据才会存入到solr中
搜索出来的数据主需要有部分字段,
因此,通过设计一个专门用于存放solr中的数据的模型(javabean),来先获取这样的所有的数据,然后再存到solr里。
2)设计javabean
商品id
商品名称
商品实际售价
商品图片
商品描述
3)根据javabean中的属性设计sql语句
|
SELECT a.pid as id, a.pname as t_product_name, a.sale_price as t_product_sale_price, a.pimage as t_product_pimage, b.pdesc as t_product_pdesc FROM t_product a LEFT JOIN t_product_desc b ON a.pid = b.`pid` |
4)在solr中注册字段
编辑ik配置文件: managed_schema
<field name="t_product_name" type="text_ik" indexed="true" stored="true"/>
<field name="t_product_sale_price" type="pfloat" indexed="true" stored="true"/>
<field name="t_product_pimage" type="text_general" indexed="true" stored="true"/>
<field name="t_product_pdesc" type="text_ik" indexed="true" stored="true"/>
让配置文件在容器中生效
# 复制到容器
docker cp managed-schema solr:/opt/solr/server/solr/ik_core/conf
# 重启容器
docker-compose restart
5)在solr的浏览器客户端中插入数据
6)查询数据
7)删除数据
根据查询结果删除
根据id来删除
二、在springboot中使用solr实现增删改查
1.添加依赖
|
<dependency> |
yml:
spring: data: solr: host: http://192.168.2.143:8983/solr/ik_core
2.编写javabean
3.往solr中插入数据
@Autowired private TProductSearchDTOMapper mapper; @Autowired private SolrClient solrClient; //将数据库中获取的数据,插入到solr库中 @Test public void insertDataToSolr() throws IOException, SolrServerException { //1.获取数据库中的数据 List<TProductSearchDTO> products = mapper.selectAll(); //2.将数据插入到solr //用于存放所有solr数据的集合 List<SolrInputDocument> documents = new ArrayList<>(); //封装Document对象 for (TProductSearchDTO product : products) { SolrInputDocument document = new SolrInputDocument(); document.addField("id",product.getId()); document.addField("t_product_name",product.gettProductName()); document.addField("t_product_sale_price",product.gettProductSalePrice().floatValue()); document.addField("t_product_pimage",product.gettProductPimage()); document.addField("t_product_pdesc",product.gettProductPdesc()); //存入到集合中 documents.add(document); } //提交给solr客户端 solrClient.add(documents); //commit solrClient.commit(); }
|
4.在solr中查询数据
1)普通的查询并封装
@Autowired private SolrClient solrClient; //查询solr库 @Test public void testQueryFromSolr() throws IOException, SolrServerException { // String keyword = "t_product_name:手机"; //指定字段查询 //复制域查询 String keyword = "手机"; //创建查询对象 SolrQuery query = new SolrQuery(); //往对象中设置参数 query.set("df","t_product_keywords");//复制域查询 query.setQuery(keyword); query.setStart(0); query.setRows(10); //高亮 query.addHighlightField("t_product_name"); query.setHighlight(true); query.setHighlightSimplePre("<span style='color:red'>"); query.setHighlightSimplePost("</span>"); //执行查询.得到响应结果 QueryResponse response = solrClient.query(query); // System.out.println(response); //封装结果集==> List<TProductSearchDTO> List<TProductSearchDTO> products = new ArrayList<>(); SolrDocumentList results = response.getResults(); for (SolrDocument document : results) { TProductSearchDTO product = new TProductSearchDTO(); Long id = Long.parseLong((String) document.getFieldValue("id")); product.setId(id); String t_product_name = (String) document.getFieldValue("t_product_name"); product.settProductName(t_product_name); Float t_product_sale_price = (Float) document.getFieldValue("t_product_sale_price"); product.settProductSalePrice(new BigDecimal(t_product_sale_price)); String t_product_pimage = (String) document.getFieldValue("t_product_pimage"); product.settProductPimage(t_product_pimage); String t_product_pdesc = (String) document.getFieldValue("t_product_pdesc"); product.settProductPdesc(t_product_pdesc); products.add(product); } System.out.println(products); }
|
2)带高亮的查询并封装
@Autowired private SolrClient solrClient; //查询solr库 @Test public void testQueryFromSolr() throws IOException, SolrServerException { // String keyword = "t_product_name:手机"; //指定字段查询 //复制域查询 String keyword = "手机"; //创建查询对象 SolrQuery query = new SolrQuery(); //往对象中设置参数 query.set("df","t_product_keywords");//复制域查询 query.setQuery(keyword); query.setStart(0); query.setRows(10); //高亮 query.addHighlightField("t_product_name"); query.setHighlight(true); query.setHighlightSimplePre("<span style='color:red'>"); query.setHighlightSimplePost("</span>"); //执行查询.得到响应结果 QueryResponse response = solrClient.query(query); // System.out.println(response); //封装结果集==> List<TProductSearchDTO> List<TProductSearchDTO> products = new ArrayList<>(); //获得数据结果集 SolrDocumentList results = response.getResults(); //获得高亮结果集 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); for (SolrDocument document : results) { TProductSearchDTO product = new TProductSearchDTO(); String stringId = (String) document.getFieldValue("id"); Long id = Long.parseLong(stringId );//89983 product.setId(id); //==========从高亮结果集中那带高亮效果的t_product_name============= Map<String, List<String>> stringListMap = highlighting.get(stringId); List<String> t_product_name1 = stringListMap.get("t_product_name"); String t_product_name = t_product_name1.get(0); product.settProductName(t_product_name); Float t_product_sale_price = (Float) document.getFieldValue("t_product_sale_price"); product.settProductSalePrice(new BigDecimal(t_product_sale_price)); String t_product_pimage = (String) document.getFieldValue("t_product_pimage"); product.settProductPimage(t_product_pimage); String t_product_pdesc = (String) document.getFieldValue("t_product_pdesc"); product.settProductPdesc(t_product_pdesc); products.add(product); } System.out.println(products); }
|