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

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

相关推荐