创建索引
说明:根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。
public void testCreateIndex() throws SolrServerException, IOException {SolrServer solrServer = new HttpSolrServer(urlString);SolrInputDocument document = new SolrInputDocument();document.addField("id", "c0001");document.addField("product_name", "传智java教程");//商品名称document.addField("product_price", 86.5f);//商品价格document.addField("product_picture", "382782828.jpg");//商品图片document.addField("product_description", "这是一本深入浅出讲解java技术的书籍!");//商品描述document.addField("product_catalog_name", "javabook");//商品分类UpdateResponse response = solrServer.add(document);// 提交solrServer.commit();}
删除索引
public void testDeleteIndex() throws SolrServerException, IOException {SolrServer solrServer = new HttpSolrServer(urlString);//根据id删除UpdateResponse response = solrServer.deleteById("c0001");//根据多个id删除// solrServer.deleteById(ids...);//自动查询条件删除// solrServer.deleteByQuery("product_keywords:教程");// 提交solrServer.commit();}
搜索索引
简单搜索
public void testSearch() throws SolrServerException {SolrServer solr = new HttpSolrServer(urlString);// 查询对象SolrQuery query = new SolrQuery();//设置查询条件,名称“q”是固定的且必须 的//搜索product_keywords域,product_keywords是复制域包括product_name和product_descriptionquery.set("q", "product_keywords:java教程");// 请求查询QueryResponse response = solr.query(query);// 查询结果SolrDocumentList docs = response.getResults();// 查询文档总数System.out.println("查询文档总数" + docs.getNumFound());for (SolrDocument doc : docs) {//商品主键String id = (String) doc.getFieldValue("id");//商品名称String product_name = (String) doc.getFieldValue("product_name");//商品价格Float product_price = (Float) doc.getFieldValue("product_price");//商品图片String product_picture = (String) doc.getFieldValue("product_picture");//商品分类String product_catalog_name = (String) doc.getFieldValue("product_catalog_name");System.out.println("=============================");System.out.println(id);System.out.println(product_name);System.out.println(product_price);System.out.println(product_picture);System.out.println(product_catalog_name);}}
组合查询
public void testSearch2() throws SolrServerException {SolrServer solr = new HttpSolrServer(urlString);// 查询对象SolrQuery query = new SolrQuery();// 搜索product_keywords域,product_keywords是复制域包括product_name和product_description// 设置商品分类、关键字查询// query.set("q", "product_keywords:挂钩 AND product_catalog_name:幽默杂货");query.setQuery("product_keywords:挂钩 AND product_catalog_name:幽默杂货");// 设置价格范围query.set("fq", "product_price:[1 TO 20]");// 查询结果按照价格降序排序// query.set("sort", "product_price desc");query.addSort("product_price", ORDER.desc);// 请求查询QueryResponse response = solr.query(query);// 查询结果SolrDocumentList docs = response.getResults();// 查询文档总数System.out.println("查询文档总数" + docs.getNumFound());for (SolrDocument doc : docs) {// 商品主键String id = (String) doc.getFieldValue("id");// 商品名称String product_name = (String) doc.getFieldValue("product_name");// 商品价格Float product_price = (Float) doc.getFieldValue("product_price");// 商品图片String product_picture = (String) doc.getFieldValue("product_picture");// 商品分类String product_catalog_name = (String) doc.getFieldValue("product_catalog_name");System.out.println("=============================");System.out.println("id=" + id);System.out.println("product_name=" + product_name);System.out.println("product_price=" + product_price);System.out.println("product_picture=" + product_picture);System.out.println("product_catalog_name=" + product_catalog_name);}}
分页、高亮
public void testSearch3() throws SolrServerException {SolrServer solr = new HttpSolrServer(urlString);// 查询对象SolrQuery query = new SolrQuery();// 设置商品分类、关键字查询query.setQuery("product_keywords:透明挂钩 ");// 分页参数// 每页显示记录数int pageSize = 2;// 当前页码int curPage = 2;// 开始记录下标int begin = pageSize * (curPage - 1);// 起始下标query.setStart(begin);// 结束下标query.setRows(pageSize);// 设置高亮参数query.setHighlight(true); // 开启高亮组件query.addHighlightField("product_name");// 高亮字段query.setHighlightSimplePre("<span color='red'>");// 前缀标记query.setHighlightSimplePost("</span>");// 后缀标记// 请求查询QueryResponse response = solr.query(query);// 查询结果SolrDocumentList docs = response.getResults();// 查询文档总数System.out.println("查询文档总数" + docs.getNumFound());for (SolrDocument doc : docs) {// 商品主键String id = (String) doc.getFieldValue("id");// 商品名称String product_name = (String) doc.getFieldValue("product_name");// 商品价格Float product_price = (Float) doc.getFieldValue("product_price");// 商品图片String product_picture = (String) doc.getFieldValue("product_picture");// 商品分类String product_catalog_name = (String) doc.getFieldValue("product_catalog_name");System.out.println("=============================");System.out.println("id=" + id);System.out.println("product_name=" + product_name);System.out.println("product_price=" + product_price);System.out.println("product_picture=" + product_picture);System.out.println("product_catalog_name=" + product_catalog_name);// 高亮信息if (response.getHighlighting() != null) {if (response.getHighlighting().get(id) != null) {Map<String, List<String>> map = response.getHighlighting().get(id);// 取出高亮片段if (map.get("product_name") != null) {for (String s : map.get("product_name")) {System.out.println(s);}}}}}}