在前面熟悉了solr的配置,在solr配置好了之后,solr就可以增加索引了,这样就必须使用solrJ了,我在附件上传了很多例子。
solrHome是存储索引的地方。
solr是一个java工程,里面是solrj的一些实现代码
solrWeb是一个web工程,主要是配置solr的一些配置项,这个只是一个辅助主项目的一个辅助web工程。
solr的大jar是solrweb工程里面的jar包解压之后直接放到solrwe下的webinfo下的lib下即可。
大家可以通过上一篇博文先进性配置,配置项的一些jar包,这个博文里面全部都有。下面来介绍一下solrj的一些接口的使用。
public static void main(String[] args) throws Exception {
String url="http://localhost:8080/solr/core1";//其实配置好solr之后,浏览器可以直接打开访问,注意要带上你配置访问的实例名字core1
CommonsHttpSolrServer server=new CommonsHttpSolrServer(url);//根据url得到服务器实例
//下面就是一些http的配置项,一般照写就行了
server.setSoTimeout(1000);
server.setConnectionTimeout(1000);
server.setDefaultMaxConnectionsPerHost(1000);
server.setMaxTotalConnections(1000);
server.setFollowRedirects(false);// defaults to false
// allowCompression defaults to false.
server.setAllowCompression(true);
server.setMaxRetries(1);// defaults to 0. > 1 not recommended.
System.out.println(server);
//增加索引
SolrInputDocument doc1=new SolrInputDocument();//得到一个doc实例,这个实际上就是数据库里面的一行记录
//向doc里面增加数据。
第一个参数,id和name之类是在solrHome里面的schema.xml配置好的字段,要保持一致。
第二个参数,是字段的值
第三个参数,是字段的权重,如果权重越大,检索越优先。默认的权重是1.0
doc1.addField("id","1",1.0f);
doc1.addField("type","hehe",1.0f);
doc1.addField("name","黄俊华",1.0f);
//增加到server里面
server.add(doc1);
//如果增加的doc也就是索引的内容完全一样,solr默认增加不进去的。
//增加索引
SolrInputDocument doc2=new SolrInputDocument();
doc2.addField("id","2",1.0f);
doc2.addField("type","hehe",1.0f);
doc2.addField("name","黄俊华",1.0f);
server.add(doc2);
//增加索引
SolrInputDocument doc3=new SolrInputDocument();
doc3.addField("id","3",1.0f);
doc3.addField("type","hehe",1.0f);
doc3.addField("name","黄俊华",1.0f);
server.add(doc3);
//删除全部索引
*:*是全部匹配
// server.deleteByQuery("*:*");
//根据ID删除一个索引
这个ID是在索引里面的主键,在schema文件里面规定的。
// server.deleteById("1");
//提交,只有提交才是被全部写入到索引里面
server.commit();
//查询
SolrQuery query=new SolrQuery();
query.setQuery("*:*");//全查
query.setQuery("id:1");//查询ID为1的数据,里面对应的查询语句
query.addSortField("id",SolrQuery.ORDER.desc);//字段排序
query.addField("id");//要显示的查询字段ID
query.addField("name");
QueryResponse rsp=server.query(query);
SolrDocumentList docs=rsp.getResults();
System.out.println(docs.getNumFound());//输出命中个数
System.out.println(docs);
}