一,简介
前面已经说了solr6.6的配置和管理工具的使用,现在来说下solr6.6api接口编程,solr6.6的api接口编程可以应对java,c#,python这些语言进行编程,本博客以java为例进行说明。同时说明下里面的配置文件solrConfig.xml和managed-schema内容,还有如何从数据库中导入数据到索引库中
1.solrJ编程
关于solr有个官方的pdf文档,里面有关于solr的介绍,以及clientApi的使用,就是sorj编程的使用,连接如下;
http://download.youkuaiyun.com/detail/k_122/9920894
现在说下solrj编程的代码如下
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.DefaultSolrParams;
import org.apache.solr.common.params.HighlightParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.junit.Test;
import com.itheima.bean.Article;
/**
* 使用solrJ来调用solr服务
* @author km
*
*/
public class SolrJ {
/**
* 使用solr向索引库添加一条数据
* @throws SolrServerException
* @throws IOException
*/
@Test
public void addIndex() throws SolrServerException, IOException{
//连接的Url
String urlString = "http://localhost:8983/solr/mycore";
//创建solr客户端
SolrClient solr = new HttpSolrClient.Builder(urlString).build();
//创建 SolrInputDocument对象
// SolrInputDocument document = new SolrInputDocument();
//第一种方式添加数据,(使用字段)
//添加字段
//document.addField("id", "9527");
//document.addField("name", "啦啦");
//document.addField("content", "solr是个好东西");
//添加document
// solr.add(document);
//第二种方式添加数据(使用对象集合)
List<Article> list = new ArrayList<Article>();
for(int i=30;i<=60;i++){
Article article = new Article();
article.setId(i);
article.setName("张芸");
article.setTitle("是一个很有文艺范的名字");
article.setPrice("1354"+i);
article.setContent("亭亭玉立的女孩");
list.add(article);
}
//添加对象集合
solr.addBeans(list);
//第三种方式添加数据
// Article article = new Article();
//
// article.setId(26);
// article.setName("高大上");
// article.setTitle("白富美");
// article.setContent("高大上白富美");
//
//
// //添加对象
// solr.addBean(article);
//提交服务器
solr.commit();
}
//删除索引
@Test
public void delIndexByID() throws SolrServerException, IOException{
String urlString = "http://localhost:8983/solr/mycore";
SolrClient solr = new HttpSolrClient.Builder(urlString).build();
solr.deleteById("26");
solr.commit();
}
@Test
/**
* 向索引库添加数据时,如果id和索引库id重复那么就会更新索引库的数据,可以用于更新数据库数据
* @throws IOException
* @throws SolrServerException
*/
public void updateIndex() throws IOException, SolrServerException{
String urlString = "http://localhost:8983/solr/mycore";
SolrClient solr = new HttpSolrClient.Builder(urlString).build();
Article article = new Article();
article.setId(1);
article.setName("张芸");
article.setPrice("564");
article.setTitle("新名字");
article.setContent("好听的新名字");
solr.addBean(article);
solr.commit();
}
@Test
public void testFind() throws SolrServerException, IOException{
String urlString = "http://localhost:8983/solr/mycore";
SolrClient solr = new HttpSolrClient.Builder(urlString).build();
//使用这个对象做查询
SolrQuery params = new SolrQuery();
params.setQuery("name:张芸");
//分页,默认是分页从0开始,每页显示10行
params.setStart(0);
params.setRows(30);
//开启高亮
params.setHighlight(true);
//高亮的格式化
params.setHighlightSimplePre("<font color='red'>");
params.setHighlightSimplePost("</font>");
//我需要高亮的字段进行高亮显示
//注意这里是hl.fl不是h1.f1;
params.setParam("hl.fl", "name");
QueryResponse queryResponse =solr.query(params);
//拿到数据集合,返回查询结果
List<SolrDocument> list =queryResponse.getResults();
//拿到所有高亮的结果
Map<String, Map<String, List<String>>> mapList = queryResponse.getHighlighting();
//循环打印数据集合
for(SolrDocument solrDocument : list){
Object id = solrDocument.get("id");
Object content = solrDocument.get("content");
System.out.println(id.toString());
System.out.println(content.toString());
Map<String, List<String>> map = mapList.get(id);
List<String> fieldList = map.get("name");
System.out.println(fieldList);
}
}
}
来说下和solr4.4的区别主要在于核心api的创建时不同的
6.6是用 SolrClient solr = new HttpSolrClient.Builder(urlString).build();来创建的。而4.4是使用SolrServer solr = new HttpSolrServer(urlString);来创建的
关于代码的说明。在代码里面都有,mycore是创建的核心,也是你要连接的核心,其他地方没什么不同了。上面的代码就是solrj的编程
2.solr的core里面两个配置文件
(1).solrConfig.xml
注释太多直接截图了
这里是加载所用的jar包
以什么格式返回插叙的数据
请求的方式,比如这个就是请求query(查询),当做数据导入时,需要使用这个requestHandle
(2)managed-schema
solr6.6把配置文件改成了这个,而不是原来的schema.xml但是内容是一样的
动态字段如下图
动态字段表示,当你向索引库添加数据时,那么只要字段名符合这个格式例如 text_el,那么他就会自动套用该格式的字段
copyFiled如下图
可以把多个copyField组合成一个字段来使用
3.导入数据库数据到solr索引库
参考这个博客:http://blog.youkuaiyun.com/xiejunjie1/article/details/73967810