Ctommy 2014-11-25
HttpSolrServerss=newHttpSolrServer("http://10.0.11.144:8080/solr_info");
1、solr的增加
solr的增加有两种方式,一种是基于javaBean的方式增加,另一种是基于SolrInputDocument的方式的增加:
(1)SolrInputDocument方式:
一、增加单个
SolrInputDocument sid = new SolrInputDocument(); sid.setField("id", "1"); sid.setField("name", "王**"); ss.add(sid); ss.commit();
二、批量增加
List<SolrInputDocument> sdList = new ArrayList<SolrInputDocument>(); SolrInputDocument sid = new SolrInputDocument(); sid.setField("id", "3"); sid.setField("name", "王武"); sdList.add(sid); ss.add(sdList); ss.commit(); //提交之后才有效.
(2)javaBean的方式:
public class GsWordDocument { @Field("id") private Integer id; @Field("wordName") private String wordName;//词条名称 @Field("wordContext") private String wordContext;//词条内容 @Field("wordContext_mark") private String wordContextMark;//标注的词条内容 @Field("wordType") private Integer wordType;//词条类型 @Field("wordTypeValue") private String wordTypeValue;//词条类型名称 @Field("source") private Integer source;//实例来源 @Field("sourceValue") private String sourceValue;//实例来源名称 //get和set方法. }
javaBean必须用Field进行标注.
一、单个Bean增加
GsWordDocument gs = new GsWordDocument(); ss.addBean(gs); ss.commit();
二、批量增加Bean
List<GsWordDocument> gsList = new ArrayList<GsWordDocument>(); ss.addBeans(gsList); ss.commit();
2、solr的删除
(1)根据id进行删除
ss.deleteById("1"); //删除id为1的信息 ss.commit(); ---------------------------------------------- List<String> idList = new ArrayList<String>(); ss.deleteById(idList); //根据id批量删除. ss.commit();
(2)根据其他字段进行删除
ss.deleteByQuery("name:王**"); //如果是*:*则表示删除全部. ss.commit();
3、solr的查询
(1)分页查询:
SolrQuery sq = new SolrQuery(); sq.setQuery("*:*"); //从第0条记录开始,每次返回2条数据.可以用做分页查询. sq.setStart(0); sq.setRows(2); //排序:根据id进行升序排列. sq.addSort("id", ORDER.asc); QueryResponse qr = ss.query(sq); SolrDocumentList sdl = qr.getResults(); for(SolrDocument sd : sdl){ System.out.println(sd.get("name")); }
(2)分面查询:
SolrQuery sq = new SolrQuery(); sq.setQuery("*:*"); sq.setFacet(true); //开启分面查询 sq.addFacetField("name_str"); //查询的字段名 sq.setFacetLimit(15); //每次返回数据的个数 sq.setIncludeScore(true); QueryResponse qr = ss.query(sq); List<Count> countList = qr.getFacetField("name_str").getValues(); for(Count count : countList){ //获取的name_str的值和数量 System.out.println(count.getName() + ":" + count.getCount()); }
关于查询应注意:
1、进行分面查询时如果name_str在solr只是单纯的一个值:如name_str:赵四,name_str:赵武,那么打印的结果为--赵:2,四:1,武:1
2、进行分面查询时如果name_str在solr是多个值:如name_str:[张三,李四,王武],name_str:[张三],那么打印的结果为--张三:2,李四:1,王武:1