solr的java调用

SolrJ的使用

SolrJ覆盖了solr的全部功能,下面将自己在实际开发中所使用的程序粘贴出来并适当加以解释,由于本人比较菜,代码书写不是那么的精练,还请见谅。

1、 创建solrserver对象:

try {

solr = new CommonsHttpSolrServer("http://localhost:8983/solr");

solr.setConnectionTimeout(100);

solr.setDefaultMaxConnectionsPerHost(100);

solr.setMaxTotalConnections(100);

} catch (Exception e) {

System.out.println("请检查tomcat服务器或端口是否开启!");

e.printStackTrace();

}

2、 添加索引

Collection docs = new ArrayList ();

for (int i = 0; i < list.size(); i++) {

Item item = list.get(i);

//设置每个字段不得为空,可以在提交索引前进行检查

if (CheckItem(item)) {

SolrInputDocument doc = new SolrInputDocument();

//在这里请注意date的格式,要进行适当的转化,上文已提到

doc.addField("id", item.getId());

…………

docs.add(doc);

}

}

try {

solr.add(docs);

//对索引进行优化

solr.optimize();

solr.commit();

} catch (Exception e) {

e.printStackTrace();

}

3、 使用bean对象添加索引

创建一个对应于solr索引的类别:

public class Item {

@Field

private String id;

…………

public void setId(String id) {

this.id = id;

}

public String getId() {

return id;

}

…………

public Item(){

}

}

使用数据创建bean对象列表,

try {

solr.addBeans(beansList);

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

solr.optimize();

solr.commit();

} catch (Exception e) {

e.printStackTrace();

}

}

索引提交完毕。

4、 删除索引

据查询结果删除:

try {

//删除所有的索引

solr.deleteByQuery("*:*");

solr.commit();

} catch (Exception e) {

e.printStackTrace();

}

根据索引号删除索引:

try {

solr.deleteById(ids);

solr.commit();

} catch (Exception e) {

e.printStackTrace();

}

5、 查询

SolrJ提供的查询功能比较强大,可以进行结果中查询、范围查询、排序等。

下面是笔者封装的一个查询函数:

public static QueryResponse Search(String[] field, String[] key, int start,

int count, String[] sortfield, Boolean[] flag, Boolean hightlight) {

//检测输入是否合法

if (null == field || null == key || field.length != key.length) {

return null;

}

if (null == sortfield || null == flag || sortfield.length != flag.length) {

return null;

}

SolrQuery query = null;

try {

//初始化查询对象

query = new SolrQuery(field[0] + ":" + key[0]);

for (int i = 0; i < field.length; i++) {

query.addFilterQuery(field[i] + ":" + key[i]);

}

//设置起始位置与返回结果数

query.setStart(start);

query.setRows(count);

//设置排序

for(int i=0; i

if (flag[i]) {

query.addSortField(sortfield[i], SolrQuery.ORDER.asc);

} else {

query.addSortField(sortfield[i], SolrQuery.ORDER.desc);

}

}

//设置高亮

if (null != hightlight) {

query.setHighlight(true); // 开启高亮组件

query.addHighlightField("title");// 高亮字段

query.setHighlightSimplePre("");// 标记

query.setHighlightSimplePost("");

query.setHighlightSnippets(1);//结果分片数,默认为1

query.setHighlightFragsize(1000);//每个分片的最大长度,默认为100

}

} catch (Exception e) {

e.printStackTrace();

}

QueryResponse rsp = null;

try {

rsp = solr.query(query);

} catch (Exception e) {

e.printStackTrace();

return null;

}

//返回查询结果

return rsp;

}

补充一下范围查询的格式:[star t TO end],start与end是相应数据格式的值的字符串形式,"TO" 一定要保持大写!