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工程"中,我们将探讨如何使用Java客户端与华为FusionInsight SolrTest进行交互,以及如何在SolrCloud模式下进行分布式搜索。 首先,让我们了解Solr的基本概念。Solr的核心功能是提供高效的全文...
### Solr在Java中的使用总结 #### 一、Solr简介 Solr是一个高性能的全文搜索引擎,基于Apache Lucene开发,使用Java 5编写。它不仅继承了Lucene的强大功能,还提供了更丰富的查询语言以及更好的性能优化。Solr具备...
solr配置,部署,定时任务更新,数据源配置, solr_java 运用详解
标题中的“Solr java分词器”指的是Apache Solr中使用的Java实现的分词工具,主要负责对输入的文本进行词汇分析,以便于索引和搜索。Solr是一款基于Lucene的开源搜索引擎,它提供了更高级别的API和配置选项,包括...
这个Demo项目非常适合初学者,通过实际运行和修改代码,你可以更好地理解Solr与Java的整合过程,掌握Solrj的使用技巧,以及如何在Java应用中实现高效的全文搜索功能。同时,它也能帮助你了解Solr的索引和查询机制,...
在Java环境中使用Solr,我们需要引入相应的Jar包来支持Java代码与Solr服务器进行交互。下面将详细介绍Solr与Java集成的关键知识点,以及如何管理和使用相关的Jar文件。 1. **SolrJ**:SolrJ是Solr提供的Java客户端...
标题中的“Solr java IKAnalyzer词库”指的是在Java环境下使用Apache Solr搜索引擎时,配合IKAnalyzer进行中文分词的实践。IKAnalyzer是一个开源的、基于Java实现的中文分词器,它针对Solr这样的全文检索框架优化,...
标签 "sorl 实例 源码" 暗示了这个压缩包包含实际的代码示例和可能的源代码,这些实例可以帮助学习者深入理解如何在Java项目中引入和使用Solr。实例通常是学习新工具或技术的最好方式,源码分析能让人更直观地看到...
"solr6.5使用的IK分词"就是一个针对Solr 6.5版本的中文分词解决方案。 **IK分词器** IK分词器(Intelligent Chinese Analyzer)是由Lucene社区开发的一款高性能的中文分词工具,适用于Java环境。它的主要目标是为...
Solr是基于Java的开源全文搜索服务器,采用了Apache Lucene作为其核心搜索引擎库。Lucene是Java实现的全文检索库,提供索引、查询、排序等功能。Solr在其之上进行了封装,增加了分布式搜索、XML/HTTP和JSON接口、...
搭建Solr服务需要Java环境,推荐在Linux系统中使用Tomcat作为应用服务器进行搭建。搭建步骤包括: - 准备Tomcat压缩包和Solr压缩包。 - 将这两个压缩包上传到Linux系统,并进行解压。 - 将Solr的WAR包复制到Tomcat的...
solr使用和原理 简单明了的介绍了solr的使用和原理,及其部署方式,适合初学者第一次部署
标题中的"solr ssm java"表明这是一个使用Java语言,结合Spring、SpringMVC和MyBatis(SSM)框架的项目,其中整合了Apache Solr搜索引擎。让我们深入了解一下这些技术及其相互作用。 **Solr**: Apache Solr是基于...
4. **JMS支持**:如果你打算使用JMS(Java消息服务)进行Solr的实时索引,`lib`目录可能会包含相关的JAR文件,如`activemq-client.jar`。 5. **云支持**:在分布式环境中,`lib`目录会包含`solrcloud.jar`,提供...
Solr是中国Apache软件基金会开发的一款开源全文搜索引擎,它提供了分布式、可扩展的搜索和分析功能。本教程将深入探讨Solr的基本概念、安装...同时,solrJ和IK分词器的使用将进一步提升你在Java环境中操作Solr的能力。
### Solr的安装使用步骤详解 #### Solr概述与特性 **Solr** 是 Apache 下的一个顶级开源项目,它基于 **Lucene** 进行构建,提供了强大的全文搜索能力。相较于 Lucene,Solr 提供了更为丰富的查询语言支持,并且...
- 使用Java与Solr集成,主要通过SolrJ库,这是一个Java客户端API,用于与Solr服务器通信。 - 集成步骤包括:添加SolrJ依赖、创建SolrServer对象、构建索引文档、发送请求到Solr服务器进行索引或查询操作。 3. **...
### Lucene与Solr的使用详解 #### 一、Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它能够为应用系统提供强大的全文检索能力,是当前最为流行的开源搜索库之一。由于其高度可...
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询