高级查询部分的内容其实还有很多,详细请参考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交流