Solrj Java API调用详解系列(四)

时间:2022-04-28 04:41:59

高级查询部分的内容其实还有很多,详细请参考http://wiki.apache.org/solr/

之前文章一直介绍了关于solrj的查询API,对于索引的创建和删除未有设计,本文将介绍索引的创建和删除,并介绍部分与查询相关不太常用的API。

一、           过滤查询字段

有时查询会的docs中可能不需要包含所有的field,只需要关注其中的几个。那么通过fl(field list)参数的设置可以实现field的过滤。

例如:

SolrQuery query = new SolrQuery();

query.setFields(newString[]{“name”,”age”});//只返回docs中name,age两个field。

当然query中也包含了addField(String)接口。如果以上两个字段不够,则

query.addField(“sex”);//返回的field变成了name,age,sex。

二、           为模糊查询的关键字设置AND或者OR的关系

ModifiableSolrParams params = new ModifiableSolrParams();

try{

         params.set("q.op",“OR”);//设置模糊查询属性之间的关系为OR。

         solrQuery.add(params);

}catch(Exception e){

         e.printStackTrace();

}

三、           新增索引Document

主要用到的API为:SolrInputDocumentDoc.addField(“field”,”value”);

LBHttpSolrServer  hSolrServer=

new  LBHttpSolrServer("http://localhost:8983/solr/collection3_shard1_replica1");

SolrInputDocument doc = new SolrInputDocument();

doc.addField("sourceType", "test");

doc.addField("id", "test_big_data");

double d = 14660154687488.0;

doc.addField("kpiValue", d);

doc.addField("deviceName", "x09");

doc.addField("deviceType", "hm1_1307");

doc.addField("host", "10.9.15.194");

doc.addField("date_minute", 0);

doc.addField("kpiId", 105);

doc.addField("date_year", 2013);

doc.addField("date_month", 7);

doc.addField("date_second", "00");

doc.addField("date_day", 1);

doc.addField("timestamp","2013-07-01T00:00:00Z");

hSolrServer.add(doc);

hSolrServer.optimize();

hSolrServer.commit();

还有其它API可以使用:

LBHttpSolrServer.add(Collection<SolrInputDocument> docs);//添加多个doc

LBHttpSolrServer.add(Collection<SolrInputDocument> docs, intcommitWithinMs);//在一次提交发生之前的最大毫秒数。

LBHttpSolrServer.add(SolrInputDocument doc, int commitWithinMs);

四、           删除索引

LBHttpSolrServer  hSolrServer=

new  LBHttpSolrServer("http://localhost:8983/solr/collection3_shard1_replica1");

hSolrServer.deleteByQuery(“name:Zhangsan”);//删除所有name是Zhangsan的document。

如果查询的条件是多个,可以用AND或OR设置它们之间的关系。

hSolrServer.deleteByQuery(“name:Zhangsan AND sex:male”);//姓名是Zhangsan并且性别是男性的Document。

 

本系列文章至此更新完毕,感谢大家的关注!文中如有错误或更好的方案欢迎交流。

QQ:58431505  //认证请注明:Solr交流