java开发solr,SolrJava的运用

SolrJava的使用

SolrJ 是为java 准备的客户端,用于操作Solr服务器的工作.

见:http://wiki.apache.org/solr/Solrj  。

另示例如下:

package org.com.solr36.test001;

import java.io.IOException;

import java.net.MalformedURLException;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Types;

import java.util.ArrayList;

import java.util.Collection;

import java.util.List;

import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;

import org.apache.solr.client.solrj.SolrServer;

import org.apache.solr.client.solrj.SolrServerException;

import org.apache.solr.client.solrj.impl.HttpSolrServer;

import org.apache.solr.client.solrj.response.QueryResponse;

import org.apache.solr.common.SolrDocument;

import org.apache.solr.common.SolrDocumentList;

import org.apache.solr.common.SolrInputDocument;

import org.junit.Before;

import org.junit.Test;

public class SolrTest01 {

private final static String URL = "http://localhost:8080/solr" ;

SolrServer httpSolrServer = null ;

@Before

public void init()

{

httpSolrServer = new HttpSolrServer(URL);

}

@Test

public void test01()

{

//1.创建SolrServer对象(HttpSolrServer, CommonsHttpSolrServer,EmbeddedSolrServer)

//在Solr3.6 以后:Deprecated. Use HttpSolrServer instead.

//new CommonsHttpSolrServer();

try {

//httpSolrServer.deleteByQuery("*:*");

//httpSolrServer.commit() ;

// 对solr 而言, 如果 id 相同,其它的属性值不相同的话,后者会更新前者。

SolrInputDocument sid = new SolrInputDocument();

sid.addField("id", "4") ; // id 是solr_home/conf/schema.xml 中的主键值,必须有,注意类型

sid.addField("name", "我是一个外国人");

sid.addField("msg_title", "这是我的第一个solr程序11111");

sid.addField("msg_content", "我的第一个solr能否运行吗222?") ;

httpSolrServer.add(sid) ;

httpSolrServer.commit();

} catch (SolrServerException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

@Test

public void test02()

{

try {

List docs = new ArrayList();

for(int i=5;i<10;i++)

{

SolrInputDocument sid = new SolrInputDocument();

sid.addField("id", i+"") ; // id 是solr_home/conf/schema.xml 中的主键值,必须有,注意类型

sid.addField("name", "我是一个外国人"+i);

sid.addField("title", "这是我的第一个solr程序"+i);

docs.add(sid);

}

//sid.addField("content", "我的第一个solr能否运行吗?") ;

httpSolrServer.add(docs);

httpSolrServer.commit();

//SolrParams params = new SolrParams();

//httpSolrServer.query(params )

} catch (SolrServerException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

@Test

public void test03()

{

try {

List docs = new ArrayList();

for(int i=5;i<10;i++)

{

Message sid = new Message();

sid.setId(i+"");

sid.setTitle("这是我的第一个solr程序Bean"+i);

sid.setName("我是一个外国人BEAN"+i);

sid.setMsg_content(new String[]{sid.getTitle(),sid.getName()});

docs.add(sid);

}

httpSolrServer.addBeans(docs);

httpSolrServer.commit();

//SolrParams params = new SolrParams();

//httpSolrServer.query(params )

} catch (SolrServerException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

@Test

public void test04()

{

//SolrParams

SolrQuery query = new SolrQuery("*"); // msg_all:222

query.setStart(0); //分页 起始

query.setRows(4) ; // 每页查多少条记录

try {

QueryResponse qresponse = httpSolrServer.query(query) ;

SolrDocumentList sorlList = qresponse.getResults();

System.out.println(sorlList.getNumFound());

for(SolrDocument sd :sorlList)

{

System.out.println(sd);

System.out.println(sd.getClass());

System.out.println(sd.getFieldValue("msg_title"));

}

} catch (SolrServerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 不常 用

*/

@Test

public void test05()

{

//SolrParams

SolrQuery query = new SolrQuery("*"); // msg_all:222

query.setStart(0); //分页 起始

query.setRows(4) ; // 每页查多少条记录

try {

QueryResponse qresponse = httpSolrServer.query(query) ;

List beans = qresponse.getBeans(Message.class);

for(Message sd :beans)

{

System.out.println(sd);

System.out.println(sd.getClass());

System.out.println(sd.getName());

}

} catch (SolrServerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 高亮显示

*/

@Test

public void test06()

{

//SolrParams

SolrQuery query = new SolrQuery("msg_all:程序"); // msg_all:222

query.setHighlight(true).setHighlightSimplePre("")

.setHighlightSimplePost("")

.setStart(0)

.setRows(5) ;

query.setParam("hl.fl", "msg_all,msg_name,msg_content"); // hl.fl 这是一个固定值

//query.setStart(0); //分页 起始

//query.setRows(4) ; // 每页查多少条记录

try {

QueryResponse qresponse = httpSolrServer.query(query) ;

SolrDocumentList sorlList = qresponse.getResults();

System.out.println(sorlList.getNumFound());

for(SolrDocument sd :sorlList)

{

System.out.println(sd);

System.out.println(sd.getClass());

String id =sd.getFieldValue("id")+"" ;

//System.out.println(sd.getFieldValue("msg_title"));

Map> maphighlighter = qresponse.getHighlighting().get(id);

if(maphighlighter!= null)

{

System.out.println(maphighlighter.get("msg_content")); // 这个msg_content一定要 store 才能查得到,否则查不到高亮。

System.out.println(maphighlighter.get("msg_all"));

}

}

} catch (SolrServerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private static int fetchSize = 1000;

private static HttpSolrServer solrCore;

public void TestDataBase() throws MalformedURLException

{

solrCore = new HttpSolrServer(URL);

}

/**

* Takes an SQL ResultSet and adds the documents to solr. Does it in batches

* of fetchSize.

*

* @param rs

* A ResultSet from the database.

* @return The number of documents added to solr.

* @throws SQLException

* @throws SolrServerException

* @throws IOException

*/

public long addResultSet(ResultSet rs) throws SQLException,

SolrServerException, IOException

{

long count = 0;

int innerCount = 0;

Collection docs = new ArrayList();

ResultSetMetaData rsm = rs.getMetaData();

int numColumns = rsm.getColumnCount();

String[] colNames = new String[numColumns + 1];

/**

* JDBC numbers the columns starting at 1, so the normal java convention

* of starting at zero won't work.

*/

for (int i = 1; i < (numColumns + 1); i++)

{

colNames[i] = rsm.getColumnName(i);

/**

* If there are fields that you want to handle manually, check for

* them here and change that entry in colNames to null. This will

* cause the loop in the next section to skip that database column.

*/

// //Example:

// if (rsm.getColumnName(i) == "db_id")

// {

// colNames[i] = null;

// }

}

while (rs.next())

{

count++;

innerCount++;

SolrInputDocument doc = new SolrInputDocument();

/**

* At this point, take care of manual document field assignments for

* which you previously assigned the colNames entry to null.

*/

// //Example:

// doc.addField("solr_db_id", rs.getLong("db_id"));

for (int j = 1; j < (numColumns + 1); j++)

{

if (colNames[j] != null)

{

Object f;

switch (rsm.getColumnType(j))

{

case Types.BIGINT:

{

f = rs.getLong(j);

break;

}

case Types.INTEGER:

{

f = rs.getInt(j);

break;

}

case Types.DATE:

{

f = rs.getDate(j);

break;

}

case Types.FLOAT:

{

f = rs.getFloat(j);

break;

}

case Types.DOUBLE:

{

f = rs.getDouble(j);

break;

}

case Types.TIME:

{

f = rs.getDate(j);

break;

}

case Types.BOOLEAN:

{

f = rs.getBoolean(j);

break;

}

default:

{

f = rs.getString(j);

}

}

doc.addField(colNames[j], f);

}

}

docs.add(doc);

/**

* When we reach fetchSize, index the documents and reset the inner

* counter.

*/

if (innerCount == fetchSize)

{

solrCore.add(docs);

docs.clear();

innerCount = 0;

}

}

/**

* If the outer loop ended before the inner loop reset, index the

* remaining documents.

*/

if (innerCount != 0)

{

solrCore.add(docs);

}

return count;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值