显示solr服务及系统运行信息java
solr运行的日志信息web
在Solr中,每个Core,表明一个索引库,里面包含索引数据及其配置信息。
Solr中能够拥有多个Core,也就同时管理多个索引库!就像在MySQL中能够有多个database同样!浏览器
Java运行环境信息tomcat
solr运行线程信息服务器
注意:在本文件中,有两个字段是Solr自带的字段,绝对不要删除:_version_节点和_root_节点app
属性及含义:
name:字段名称,最好如下划线或者字母开头
type:字段类型,指向的是本文件中的
indexed:是否建立索引
stored:是否被存储
multiValued:是否能够有多个值,若是字段能够有多个值,设置为truewebapp
属性及含义:
name:字段类型的名称,能够自定义,
class:字段类型在Solr中的类。StrField可索引不可分词。TextField字段可索引,能够分词,因此须要指定分词器
Lucene中原本是没有主键的。删除和修改都须要根据词条进行匹配。而Solr却能够设置一个字段为惟一主键,这样删改操做均可以根据主键来进行!命令行
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
private static String baseURL = "http://localhost:8080/solr/core1"; @Test public void createTest() throws Exception { //链接solr服务器 HttpSolrServer solrServer = new HttpSolrServer(baseURL); //建立文档对象 SolrInputDocument document = new SolrInputDocument(); document.addField("id", "5"); document.addField("title", "8848手机,钛合金外壳,注定不平凡"); document.addField("content", "8848发发发"); //向solr服务器写入文档 solrServer.add(document); solrServer.commit(); }
@Test public void create2Test() throws Exception { //链接solr服务器 HttpSolrServer solrServer = new HttpSolrServer(baseURL); //建立文档对象 Item item = new Item(); item.setId("6"); item.setTitle("金立M2017成功人士的标配"); item.setContent("金立你值得拥有"); //向solr服务器写入文档 solrServer.addBean(item); solrServer.commit(); }
//添加@Field注解 public class Item{ @Field private String id; @Field private String title; @Field private String content; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
@Test public void deleteTest() throws SolrServerException, IOException { // 链接solr服务器 HttpSolrServer solrServer = new HttpSolrServer(baseURL); // 删除索引 //solrServer.deleteById("6"); solrServer.deleteByQuery("title:金立"); // 提交 solrServer.commit(); }
在建立SolrQuery时,咱们填写的Query语句,能够有如下高级写法:线程
@Test public void queryTest() throws SolrServerException{ // 链接solr服务器 HttpSolrServer solrServer = new HttpSolrServer(baseURL); //建立查询条件对象 SolrQuery params = new SolrQuery("*:*"); //执行查询,获取响应数据 QueryResponse response = solrServer.query(params); //获取数据结果集 SolrDocumentList list = response.getResults(); System.out.println("一共获取了" + list.size()+"条结果:"); for (SolrDocument solrDocument : list) { System.out.println("id: " + solrDocument.getFieldValue("id")); System.out.println("title:" + solrDocument.getFieldValue("title")); } }
@Test public void queryBeanTest() throws SolrServerException{ // 链接solr服务器 HttpSolrServer solrServer = new HttpSolrServer(baseURL); //建立查询条件对象 SolrQuery params = new SolrQuery("*:*"); //执行查询,获取响应 QueryResponse response = solrServer.query(params); List<Item> beans = response.getBeans(Item.class); System.out.println("一共获取了" + beans.size()+"条结果:"); for (Item item : beans) { System.out.println("id: " + item.getId()); System.out.println("title:" + item.getTitle()); } }
@Test public void querySortTest() throws SolrServerException, IOException { // 链接solr服务器 HttpSolrServer solrServer = new HttpSolrServer(baseURL); // 建立查询条件对象,范围查询,包含两端 SolrQuery query = new SolrQuery("*:*"); // 设置查询的排序参数,1-排序的字段名,2-排序方式(ORDER:asc desc) query.setSort("id", ORDER.asc); // 执行查询,获取响应数据 QueryResponse response = solrServer.query(query); // 获取结果集数据 List<Item> list = response.getBeans(Item.class); System.out.println("总记录数 numFound:"+response.getResults().getNumFound()); for (Item item : list) { System.out.println("id: " + item.getId()); System.out.println("title:" + item.getTitle()); } }
@Test public void queryPageTest() throws SolrServerException, IOException { // 准备分页参数 int pageNum = 1; //页码 int pageSize = 2; //每页条数 // 链接solr服务器 HttpSolrServer solrServer = new HttpSolrServer(baseURL); // 建立查询条件对象 SolrQuery params = new SolrQuery("*:*"); // 设置查询的排序参数,1-排序的字段名,2-排序方式(ORDER:asc desc) params.setStart((pageNum-1)*pageSize);//设置起始条数 params.setRows(pageSize);//设置每页条数 // 执行查询,获取响应数据 QueryResponse response = solrServer.query(params); // 获取结果集数据 SolrDocumentList list = response.getResults(); System.out.println("一共获取了" + list.size() + "条结果:"); for (SolrDocument solrDocument : list) { System.out.println("id: " + solrDocument.getFieldValue("id")); System.out.println("title:" + solrDocument.getFieldValue("title")); } }
@Test public void highLightingTest() throws SolrServerException, IOException{ // 初始化solrj服务 HttpSolrServer server = new HttpSolrServer(baseURL); // 设置查询条件 SolrQuery params = new SolrQuery("title:手机"); // 设置前置标签 params.setHighlightSimplePre("<em >"); // 设置后置标签 params.setHighlightSimplePost("</em>"); // 添加高亮字段 params.addHighlightField("title"); // 执行查询 QueryResponse queryResponse = server.query(params); // 外层的Map,key:id,value:id之外的其余高亮字段,可能有多个,也是一个Map // 内层的Map,key:高亮字段的名称,value:字段的内容,集合 Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting(); // 遍历map,获取结果 Set<String> ids = highlighting.keySet(); for (String id : ids) { System.out.println("id: " + id);; // 获取高亮字段的集合 Map<String, List<String>> map = highlighting.get(id); // 获取高亮字段 System.out.println(map.get("title").get(0)); // 由于content不是高亮字段,因此打印出的内容为null System.out.println(map.get("content")); } }