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

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、当有分面查询时不能使用分页查询中的字段设置,否则会报错.
               2、进行分面查询时如果name_str在solr只是单纯的一个值:如name_str:赵四,name_str:赵武,那么打印的结果为--赵:2,四:1,武:1
               3、进行分面查询时如果name_str在solr是多个值:如name_str:[张三,李四,王武],name_str:[张三],那么打印的结果为--张三:2,李四:1,王武:1