`

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<SolrInputDocument>  docs = new ArrayList<SolrInputDocument>();
			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<Message>  docs = new ArrayList<Message>();
			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<Message> 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("<span class='highlighter'>")
		     .setHighlightSimplePost("</span>")
		     .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<String,List<String>> 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<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
		        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;
		    }
		    
		    
		    
}

 

 

分享到:
评论

相关推荐

    solr-java运用

    solr配置,部署,定时任务更新,数据源配置, solr_java 运用详解

    solr在java中使用总结

    这是我使用的经验文档,希望能帮助到大家

    Java搜索服务Solr操作指南.pdf

    适用于Java后台开发Solr搜索服务使用者,包括Java使用Solr服务、Solr服务器的搭建,以及Solr服务器集群的搭建

    solr使用和原理

    solr使用和原理 简单明了的介绍了solr的使用和原理,及其部署方式,适合初学者第一次部署

    Solr入门使用详解.zip

    详尽解释了solr的使用方法,java程序法开发使用solrJ,提供索引和搜索的请求方法J,索引的创建,更新。删除,field的详细使用方法,以及IK分词器的详细使用方式等

    使用java实现solr-7.1.0的api和solr最新支持的sql查询

    使用java实现solr-7.1.0的api和solr最新支持的sql查询.使用java实现solr-7.1.0的api和solr最新支持的sql查询.

    solr ssm java

    自己弄的一个maven项目 框架ssm 改改配置就能用 搭建文档我已经加到了压缩包 有不懂的可以问 windows下搭建的solr 跟linux步骤差不多

    solr3.6操作使用jar包

    本压缩包包含solr3.6在java环境下所有使用的jar包,如含apache-solr-solrj-3.6.2.jar,commons-httpclient-3.1.jar,commons-logging-1.1.jar,junit-4.8.2.jar,post.jar,slf4j-api-1.6.1.jar

    简单java实现的solr以及redis小demo

    solr,redis用java实现的小案例,本项目使用的maven,在使用前需要安装好redis和solr的服务器

    solr.md Solr是一个高性能,采用Java开发

    solr的使用

    solr在java中的使用实例代码

    本篇文章主要介绍了solr在java中的使用实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    solr介绍及使用.docx

    Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且...

    SOLR的应用教程

    1.2.1 Solr使用Lucene并且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码结构 8 1.4.1 目录...

    solr配置和solrj使用(demo)

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。...Solrj 是访问 Solr 的 Java 客户端,它提供添加、更新和查询Solr 索引的接口。http://wiki.chenlb.com/solr/doku.php?id=solrj

    Solr调研总结

    本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示、拼写检查、搜索建议、分组统计、拼音检索等功能的使用方法。

    solr用到的jar包

    下载

    solr部署安装包 5.4.1

    用户使用时 会存在无法进入solr官网下载的情况,此附带安装包 和安装教程,教程为转载其他博主的,网上也有其他相关教程 https://blog.csdn.net/tgbsqliuying/article/details/51591039

    Solr部署及开发

    Solr部署及开发 Apache Solr 是一个开源的搜索服务器,Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。

    solr3.5与tomcat的部署配置以及与java项目的集成

    solr3.5与tomcat的部署配置以及与java项目的集成 大部分步骤都有截图说明 一目了然

    solr7.5搜索框架

    solr7.5搜索框架 各种企业都在用 使用广泛 无需安装 解压就能用

Global site tag (gtag.js) - Google Analytics