5.在java项目中通过solrj操作solr索引
在solr的发表包里找到apache-solr-solrj-4.0.0.jar和他的依赖包(solr/dist/solrj-lib目录下的jar包)拷贝到项目中,然后通过调用接口来实现java对solr索引的操作
5.1、插入索引
public Booleaninsert_ap(Map<String,Object> data) throws Exception {
//取得solr项目地址
Stringurl="http://localhost:8080/solr"
SolrServerserver=newHttpSolrServer(url);
SolrInputDocumentdoc = newSolrInputDocument();
//从map中取值附到doc中
doc.setField("gjc1", data.get("GJC1"));
doc.setField("id", data.get("DB_ID"));
doc.setField("bt", data.get("BT"));
doc.setField("zz", data.get("ZZ"));
doc.setField("gjc", data.get("GJC"));
doc.setField("zzywm", data.get("ZZYWM"));
doc.setField("zzdw", data.get("ZZDW"));
doc.setField("fk_xkfl", data.get("FK_XKFL"));
doc.setField("fk_xkzy", "你好");
server.add(doc);
servermit();
returntrue;
}
5.2、删除索引
public Boolean deleteone(String id) throwsException{
//根据主键ID删除索引
Stringurl="http://localhost:8080/solr"
SolrServerserver=newHttpSolrServer(url);
UpdateResponseres= server.deleteById(id);
servermit();
returnnull;
}
5.3、更新一条记录的某个字段
public Boolean updateall(Map<String,Object> data) throws Exception {
Stringurl="http://localhost:8080/solr"
SolrServerserver=newHttpSolrServer(url);
Collection<SolrInputDocument>docs = newArrayList<SolrInputDocument>();
SolrInputDocumentdoc = newSolrInputDocument();
doc.setField("id", data.get("DB_ID"));
Map<String,Object> ky = newHashMap<String, Object>();
ky.put("set", data.get("YDCS"));
doc.setField("ydcs", ky);
docs.add(doc);
server.add(docs);
servermit();
returntrue;
}
5.4、查询索引
public List<Map<String, Object>> allsearch(String words,String subwords,String sort,Integer countbegin,Integer countnum,Boolean quanwen) throws Exception {
Stringurl="http://localhost:8080/solr"
SolrServerserver=newHttpSolrServer(url);
SolrQuery query = new SolrQuery();
//主查询字符串
query.setQuery("content:"+words);
//开启高亮
query.setHighlight(true);
//设置高亮字段例如:标题 作者摘要
query.addHighlightField("bt zz");
//高亮词前方的添加代码
query.setHighlightSimplePre("<span class='span_key'>");
//高亮词后方的添加代码
query.setHighlightSimplePost("</span>");
//子查询条件
query.addFilterQuery("bt:('物流') AND zz:('小刘')");
query.addFilterQuery("lysjk:(-ap)");
//区间查询 例如:下载次数(xzcs)从1到100
query.addFacetField("xzcs:[1 to100]");
//结果排序例如:按照阅读次数(ydcs)降序排序
query.addSortField(sort, ORDER.desc);
//分页返回结果例如:从0条开始返回前10条记录
query.setStart(0);
query.setRows(10);
//向solr发送查询请求和条件
QueryResponse response = server.query(query);
//调用solr返回查询结果
SolrDocumentList docs = response.getResults();
//调用solr返回查询结果的高亮结果
Map<String,Map<String,List<String>>> map = response.getHighlighting();
//返回结果数量
longcount= docs.getNumFound();
if (count== 0){
returnnull;
}
//查询耗时单位:毫秒
//int timecost= response.getQTime();
//循环取数据
List <Map<String,Object>> returnlist= newArrayList<Map<String, Object>>();
for(inti=0;i<docs.size();i++){
SolrDocument d=docs.get(i);
Map<String,Object> onedata = newHashMap<String,Object>();
onedata.put("id",(String) d.get("id"));
onedata.put("lysjk",substrin(d.getFieldValue("lysjk")));
onedata.put("fbrq",d.getFieldValue("fbrq"));
onedata.put("sccs",d.getFieldValue("sccs"));
//标题
if (map.get(d.get("id")).get("bt") == null){
onedata.put("bt",substrin(d.getFieldValue("bt")));
}else{
//有高亮的字段,从高亮的map中取数据
onedata.put("bt",substrin(map.get(d.get("id")).get("bt")));
}
//作者
String zz = "";
if (map.get(d.get("id")).get("zz") == null){
zz = substrin(d.getFieldValue("zz"));
onedata.put("zz",separatestring(zz));
}else{
zz = substrin(map.get(d.get("id")).get("zz"));
onedata.put("zz",separatestring(zz));
}
//摘要
if (map.get(d.get("id")).get("zy") == null){
onedata.put("zy",substrin(d.getFieldValue("zy")));
}else{
onedata.put("zy",substrin(map.get(d.get("id")).get("zy")));
}
returnlist.add(onedata);
}
Map<String,Object> countnumber = newHashMap<String,Object>();
countnumber.put("countnumber",count);
returnlist.add(countnumber);
returnreturnlist;
}
更多推荐
solr 搜索引擎搭建和使用 (三)
发布评论