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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值