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配置,部署,定时任务更新,数据源配置, solr_java 运用详解
这是我使用的经验文档,希望能帮助到大家
适用于Java后台开发Solr搜索服务使用者,包括Java使用Solr服务、Solr服务器的搭建,以及Solr服务器集群的搭建
solr使用和原理 简单明了的介绍了solr的使用和原理,及其部署方式,适合初学者第一次部署
详尽解释了solr的使用方法,java程序法开发使用solrJ,提供索引和搜索的请求方法J,索引的创建,更新。删除,field的详细使用方法,以及IK分词器的详细使用方式等
使用java实现solr-7.1.0的api和solr最新支持的sql查询.使用java实现solr-7.1.0的api和solr最新支持的sql查询.
自己弄的一个maven项目 框架ssm 改改配置就能用 搭建文档我已经加到了压缩包 有不懂的可以问 windows下搭建的solr 跟linux步骤差不多
本压缩包包含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
solr,redis用java实现的小案例,本项目使用的maven,在使用前需要安装好redis和solr的服务器
solr的使用
本篇文章主要介绍了solr在java中的使用实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且...
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是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。...Solrj 是访问 Solr 的 Java 客户端,它提供添加、更新和查询Solr 索引的接口。http://wiki.chenlb.com/solr/doku.php?id=solrj
本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示、拼写检查、搜索建议、分组统计、拼音检索等功能的使用方法。
下载
用户使用时 会存在无法进入solr官网下载的情况,此附带安装包 和安装教程,教程为转载其他博主的,网上也有其他相关教程 https://blog.csdn.net/tgbsqliuying/article/details/51591039
Solr部署及开发 Apache Solr 是一个开源的搜索服务器,Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。
solr3.5与tomcat的部署配置以及与java项目的集成 大部分步骤都有截图说明 一目了然
solr7.5搜索框架 各种企业都在用 使用广泛 无需安装 解压就能用