sunkezai 发表于 2016-12-16 11:27:09

solr索引数据的增删改查、高亮、分组和排序操作

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
页: [1]
查看完整版本: solr索引数据的增删改查、高亮、分组和排序操作