|
HttpSolrServer ss = new HttpSolrServer("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 |
|
|