《solr入门之solrserver实例化方式》由会员分享,可在线阅读,更多相关《solr入门之solrserver实例化方式(30页珍藏版)》请在金锄头文库上搜索。
1、Solr 入门之 SolrServer 实例化方式随着 solr 版本的不断升级, 差异越来越大, 从以前的 solr1.2 到现在的 solr4.3, 无论是类还是功能都有很大的变换, 为了能及时跟上新版本的步伐, 在此将新版本的使用做一个简单的入门说明:Solr3.6 版本SolrServer 实例化类型有httpClient,和本地化,如果 Solr服务器不在本地就用 httpClient,在本地就用 EmbeddedSolrServerSolrServer 可以操作索引,包括更新删除查询等操作以下是 httpClient 实例化方式,需要 tomcat 运行 Solr 服务1、Conc
2、urrentUpdateSolrServer 实例化 SolrServer,该类实例化多用于更新删除索引操作ConcurrentUpdateSolrServer(String solrServerUrl, int queueSize, int threadCount)solrServerUrl 是 Solr 服务器的地址,queueSize 缓冲区大小threadCount 后台线程数2、HttpSolrServer 实例化SolrServer,该类实例化多用于查询操作HttpSolrServer(String baseURL)baseURL 是 Solr 的服务器地址3、LBHttpSolr
3、Server 实例化SolrServer,用于有多个 Solr 服务器,负载均衡LBHttpSolrServer(String. solrServerUrls)solrServerUrls 是多个 Solr 的服务器地址,用,号分隔以下是本地实例化,即项目包含Solr 服务,不需要 tomcat 运行Solr 服务EmbeddedSolrServerprivate static CoreContainer.Initializer initializer = null; private static CoreContainer coreContainer = null; private stat
4、ic EmbeddedSolrServer server = null; static try System.setProperty(solr.solr.home, D:/test/solrcore/core0); initializer = new CoreContainer.Initializer(); coreContainer = initializer.initialize(); server = new EmbeddedSolrServer(coreContainer, ); catch (Exception e) e.printStackTrace(); Solr 搜索分页1、S
5、olrQuery 类,此类有个方法setStart(10),当设置为 10 时,表示从第 11 记录取,默认取值为 0,就是从第,1 条开始2、setRows(10),表示取出的记录数,默认就是 10 条SolrQuery query = new SolrQuery(url_content:百色学院);query.setStart(10);query.setRows(10);Solr 搜索高亮1、SolrQuery 类,此类有个方法setHighlight(true),当设置为true 时,表示开启了高亮2、高亮设置,添加 html,和设置高亮的 Field/ 以下给两个字段开启了高亮,分别是
6、 name,description, query.addHighlightField(name); query.addHighlightField(description); / 以下两个方法主要是在高亮的关键字前后加上 html 代码 query.setHighlightSimplePre(); query.setHighlightSimplePost();3、获取高亮内容Map map = response.getHighlighting();Map 的 Key 为 document 的 Id,即你在 schema.xml 中设置的 Id,Value为该 Id 对应的 document 的
7、值,请听下面分 解,Value 也为一个Map,该 Map 的 Key 为fieldName,Value 为 List,这个List 里面的内容该文 档的高亮字段。所以当做逻辑处理的时候,只要按照这个层次,依次把东西给取出来即可,如果取出来的东西为空,则用 QueryResponse 中的SolrDocument 的getFieldValue(filedName)的值。SolrJ 使用HttpSolrServerHttpSolrServer 使用 HTTPClient 和 solr 服务器进行通信。String url = http:/localhost:8080/solr;SolrServe
8、r server = new HttpSolrServer(url);HttpSolrServer 是线程安全的,建议重复使用 HttpSolrServer 实例。HttpSorlrServer 允许设置链接属性String url = http:/localhost:8080/solr;HttpSolrServer server = new HttpSolrServer( url ); server.setSoTimeout(1000); / socket read timeout server.setConnectionTimeout(100);server.setDefaultMaxCo
9、nnectionsPerHost(100); server.setMaxTotalConnections(100); server.setFollowRedirects(false);/ defaults to false / allowCompression defaults to false. / Server side must support gzip or deflate for this to have any effect. server.setAllowCompression(true); server.setMaxRetries(1); / defaults to 0. 1
10、not recommended.EmbeddedSolrServerEmbeddedSorrServer 提供和HttpSorlrServer 相同的接口,它不需要 http 连接/注意,下面的属性也是可以在 jvm参数里面设置的 System.setProperty(solr.solr.home, /home/shalinsmangar/work/oss/branch-1.3/example/solr); CoreContainer.Initializer initializer = new CoreContainer.Initializer(); CoreContainer coreCon
11、tainer = initializer.initialize(); EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, );如果你想要使用 Multicore 特性,那么你可以这样使用:File home = new File( getSolrHome() ); File f = new File( home, solr.xml ); multicore.load( getSolrHome(), f ); EmbeddedSolrServer server = new EmbeddedSolrServer( mu
12、lticore, core name as defined in solr.xml );如果你在你的项目中内嵌 solr 服务,这将是一个不错的选择。无论你能否使用 http,它都提供相同的接口用法solrj 被设计成一个可扩展的框架,用以向 solr 服务器提交请求,并接收回应。我们已经将最通用的一些命令封装在了 solrServer 类中了。Adding Data to Solr 添加 DOC 到Solr 索引 首先需要获得一个 server 的实例, SolrServer server = getSolrServer();如果,你使用的是一个远程的solrServer 的话呢,你或许会这
13、样来实现 getSolrServer()这个方法:public SolrServer getSolrServer() return new HttpSolrServer(url); 如果,你使用的是一个本地的solrServer 的话,你或许会这样来实现 getSolrServer()方法:public SolrServer getSolrServer() /the instance can be reused return new EmbeddedSolrServer(); 如果,你在添加数据之前,想清空现有的索引,那么你可以这么做:server.deleteByQuery( *:* );/
14、 delete everything!构造一个 documentSolrInputDocument doc1 = new SolrInputDocument(); doc1.addField( id, id1, 1.0f ); doc1.addField( name, doc1, 1.0f ); doc1.addField( price, 10 );构造另外一个文档,每个文档都能够被独自地提交给 solr,但是,批量提交是更高效的。每一个对SolrServer 的请求都是 http 请求,当然对于 EmbeddedSolrServer 来说,是不一样的。SolrInputDocument do
15、c2 = new SolrInputDocument(); doc2.addField( id, id2, 1.0f ); doc2.addField( name, doc2, 1.0f ); doc2.addField( price, 20 );构造一个文档的集合Collection docs = new ArrayList(); docs.add( doc1 ); docs.add( doc2 );将 documents 提交给 solrserver.add( docs );提交一个 mit();在添加完 documents 后,立即做一个 commit,你可以这样来写你的程序:UpdateRequest req = new UpdateRequest(); req.setAction( UpdateRequest.ACTION.COMMIT, false, false ); req.add( docs ); UpdateResponse rsp = req.process( server );Directly adding POJOs to Solr使用 java 注释创建 java bean。Field ,可以被用在域上,或者是 setter 方法上。如果一个域的名称跟 bean 的名称是不一样的,那么在 java 注释中填写别