solr8.0.0基本安装和在springboot中的基本使用(win10)
1、下载solr
下载地址:http://archive.apache.org/dist/lucene/solr/
该地址可以也可以下载以前的版本,我这边下载的solr-8.0.0.zip版本。下载完成之后放在的D:\project目录下,然后解压到当前目录。
注:如果下载比较慢,可以尝试使用迅雷有可能要快很多
2、启动、关闭solr
在解压之后的solr目录中找到bin文件夹,进去之后右键进入Powershell输入以下命令:
3、创建Core
在solr目录中的\server\solr文件夹中创建一个名为kawhi的文件夹。然后把\server\solr\configsets\sample_techproducts_configs下面的conf文件夹复制到刚才创建的kawhi文件夹下面。
完成上面操作之后启动solr,启动成功之后打开浏览器进入http://127.0.0.1:8983/solr/#/地址,就可以看见solr的管理界面。点击左侧的Core Admin,在新页面的name和instanceDir输入框中分别修改为刚才创建的文件夹名称kawhi,然后点击下面Add Core按钮即可成功创建core。
页面显示创建成功之后,会在你刚才创建的kawhi文件夹下面生成一个data文件夹和一个core.properties文件,这样即表示创建成功。
4、创建springboot项目和测试代码
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId> </dependency>
@Getter public class News{ @Field private String id; @Field private String name; @Field private String author; @Field private String keywords; @Field private String category; @Field private String url; public News(String id, String name, String author, String keywords, String category, String url) { this.id = id; this.name = name; this.author = author; this.keywords = keywords; this.category = category; this.url = url; } }
@RestController @RequestMapping("/solr") public class SolrController { @Autowired private SolrClient client; private static List<News> newsList= null; static{ newsList = new ArrayList<>(); newsList.add(new News(String.valueOf(System.currentTimeMillis() + 0l), "季后赛场均赢22分!广东这是刚重建就能冲冠?", "新浪体育", "季后赛,广东,冲冠", "体育", "http://sports.sina.com.cn/cba/2017-03-01/doc-ifycaafm4644256.shtml")); newsList.add(new News(String.valueOf(System.currentTimeMillis() + 1l), "广东晋级仍攒人品 杜锋:已达成赛季预期目标", "苏俊朗", "广东,杜锋,赛季,目标", "体育", "http://sports.sina.com.cn/cba/2017-03-02/doc-ifycaasy7215085.shtml")); newsList.add(new News(String.valueOf(System.currentTimeMillis() + 2l), "关键的季后赛杜锋却要废掉他,这样的广东队隐患很大", "开心奎哥", "季后赛,杜锋,广东,隐患", "体育", "http://blog.sina.com.cn/s/blog_7e892c0b0102x7jb.html?tj=tiyu")); newsList.add(new News(String.valueOf(System.currentTimeMillis() + 3l), "CBA新科MVP正与NBA球队接触 季后赛后加盟?”", "新浪体育", "CBA,NBA,季后赛", "体育", "http://sports.sina.com.cn/basketball/nba/2017-03-02/doc-ifycaafm4672837.shtml")); } @GetMapping("/batchInsert") public String insert() throws IOException, SolrServerException { try { /* 批量插入方案一 */ /*List<SolrInputDocument> solrInputDocumentList = new ArrayList<>(); for (int i = 0; i < newsList.size(); i ++){ News news = newsList.get(i); SolrInputDocument solrInputDocument = new SolrInputDocument(); solrInputDocument.setField("id", news.getId()); solrInputDocument.setField("name", news.getName()); solrInputDocument.setField("author", news.getAuthor()); solrInputDocument.setField("keywords", news.getKeywords()); solrInputDocument.setField("category", news.getCategory()); solrInputDocumentList.add(solrInputDocument); } client.add(solrInputDocumentList);//如果配置文件中没有指定core,这个方法的第一个参数就需要指定core名称,比如client.add("kawhi", doc);*/ /* 批量插入方案二(实体类属性必须指定@Field注解) */ client.addBeans(newsList); client.commit();//如果配置文件中没有指定core,这个方法的第一个参数就需要指定core名称client.commit("kawhi"); return "success"; } catch (Exception e) { e.printStackTrace(); } return "error"; } @GetMapping("/query") public String query(@RequestParam(required = true) String name) throws IOException, SolrServerException { try { /** 根据字段查询 */ SolrQuery solrQuery = new SolrQuery(); // 查询的关键字 solrQuery.setQuery("name:" + name); // 指定返回的字段 solrQuery.setFields("id", "name", "category"); // 分页,类似Mysql的limit solrQuery.setStart(0); solrQuery.setRows(2); // 排序方式 //solrQuery.setSort("id", SolrQuery.ORDER.desc); QueryResponse queryResponse = client.query(solrQuery); /* 查询结果 */ SolrDocumentList solrDocumentList = queryResponse.getResults(); System.out.println("查询结果数量为:" + solrDocumentList.getNumFound() + "\n"); solrDocumentList.stream().forEach(solrDocument -> { System.out.println("id=" + solrDocument.get("id")); System.out.println("name=" + solrDocument.get("name")); System.out.println("author=" + solrDocument.get("author"));// 上面没有指定返回,所以这里应该是空 System.out.println("keywords=" + solrDocument.get("keywords"));// 上面没有指定返回,所以这里应该是空 System.out.println("category=" + solrDocument.get("category")); System.out.println("url=" + solrDocument.get("url") + "\n");// 上面没有指定返回,所以这里应该是空 }); return "success"; } catch (Exception e) { e.printStackTrace(); } return "error"; } @GetMapping("/queryHight") public String queryHight(@RequestParam(required = true) String name) throws IOException, SolrServerException { try { /** 根据字段查询 */ SolrQuery solrQuery = new SolrQuery(); // 查询的关键字 solrQuery.setQuery("name:" + name); // 指定返回的字段 solrQuery.setFields("id", "name", "category"); //参数hl,设置高亮 solrQuery.setHighlight(true); //设置高亮的字段 solrQuery.addHighlightField("name"); //设置高亮的样式 solrQuery.setHighlightSimplePre("<font color='red'>"); solrQuery.setHighlightSimplePost("</font>"); QueryResponse queryResponse = client.query(solrQuery); // 高亮结果 Map<String, Map<String, List<String>>> hightResults = queryResponse.getHighlighting(); // 查询结果 SolrDocumentList solrDocumentList = queryResponse.getResults(); System.out.println("查询结果数量为:" + solrDocumentList.getNumFound() + "\n"); solrDocumentList.stream().forEach(solrDocument -> { String id = solrDocument.getFieldValue("id").toString(); Map<String, List<String>> hightResult = hightResults.get(id); if(hightResult.size() > 0){ System.out.println("nameHight=" + hightResult.get("name").get(0)); } System.out.println("name=" + solrDocument.get("name")); System.out.println("category=" + solrDocument.get("category") + "\n"); }); return "success"; } catch (Exception e) { e.printStackTrace(); } return "error"; } @GetMapping("/deleteAll") public String deleteAll() throws IOException, SolrServerException { try { client.deleteByQuery("*:*"); client.commit(); return "success"; } catch (Exception e) { e.printStackTrace(); } return "error"; } }
启动该项目之后,浏览器输入 http://localhost:8087/solr/batchInsert 地址即可测试插入索引操作。
插入成功之后,在solr管理界面的左下方有一个下拉框,选择你创建的core之后,再选择Query,往下拖到最后,点击Execute Query即可看见你刚才插入的索引。
上面controller中包含以下四个操作连接:
删除所有:http://localhost:8087/solr/deleteAll
批量插入:http://localhost:8087/solr/batchInsert
通过name查询:http://localhost:8087/solr/query?name=%E5%AD%A3%E5%90%8E%E8%B5%9B
通过name高亮查询:http://localhost:8087/solr/queryHight?name=%E5%AD%A3%E5%90%8E%E8%B5%9B
其他问题:
刚才我们代码中插入了6个列(id、name、author、keywords、category、url),如果你想新增一个列,比如列名叫做 name_new,然后启动项目,在插入索引,在solr管理平台中就看不见这个列名和列对应的值,原因是id、name、author、keywords、category、url这6列在solr中已经默认配置了。这种情况解决方式如下:
在你创建的kawhi文件夹下面,打开conf文件夹,修改里面的managed-schema文件,修改地点如下:
}

浙公网安备 33010602011771号