收藏 分享(赏)

Solr入门之SolrServer实例化方式.doc

上传人:weiwoduzun 文档编号:5397287 上传时间:2019-02-28 格式:DOC 页数:30 大小:97KB
下载 相关 举报
Solr入门之SolrServer实例化方式.doc_第1页
第1页 / 共30页
Solr入门之SolrServer实例化方式.doc_第2页
第2页 / 共30页
Solr入门之SolrServer实例化方式.doc_第3页
第3页 / 共30页
Solr入门之SolrServer实例化方式.doc_第4页
第4页 / 共30页
Solr入门之SolrServer实例化方式.doc_第5页
第5页 / 共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 搜索

5、分页1、SolrQuery 类,此类有个方法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 对

7、应的 document 的值,请听下面分 解,Value 也为一个Map,该 Map 的 Key 为fieldName,Value 为 List,这个List 里面的内容该文 档的高亮字段。所以当做逻辑处理的时候,只要按照这个层次,依次把东西给取出来即可,如果取出来的东西为空,则用 QueryResponse 中的SolrDocument 的getFieldValue(filedName)的值。SolrJ 使用HttpSolrServerHttpSolrServer 使用 HTTPClient 和 solr 服务器进行通信。String url = http:/localhost:8080/s

8、olr; SolrServer 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

9、.setDefaultMaxConnectionsPerHost(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); / d

10、efaults to 0. 1 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(); C

11、oreContainer coreContainer = 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

12、 EmbeddedSolrServer( multicore, “core name as defined in solr.xml“ );如果你在你的项目中内嵌 solr 服务,这将是一个不错的选择。无论你能否使用 http,它都提供相同的接口用法solrj 被设计成一个可扩展的框架,用以向 solr 服务器提交请求,并接收回应。我们已经将最通用的一些命令封装在了 solrServer 类中了。Adding Data to Solr 添加 DOC 到Solr 索引首先需要获得一个 server 的实例, SolrServer server = getSolrServer();如果,你使用的是一

13、个远程的solrServer 的话呢,你或许会这样来实现 getSolrServer()这个方法:public SolrServer getSolrServer() return new HttpSolrServer(url); 如果,你使用的是一个本地的solrServer 的话,你或许会这样来实现 getSolrServer()方法:public SolrServer getSolrServer() /the instance can be reused return new EmbeddedSolrServer(); 如果,你在添加数据之前,想清空现有的索引,那么你可以这么做:serve

14、r.deleteByQuery( “*:*“ );/ 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 请求,当然对于 EmbeddedSolr

15、Server 来说,是不一样的。SolrInputDocument doc2 = 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();在

16、添加完 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 的

17、名称是不一样的,那么在 java 注释中填写别名,具体的,可以参照下面的域 categories import org.apache.solr.client.solrj.beans.Field; public class Item Field String id; Field(“cat“) String categories; Field List features; java 注释也可以使用在 setter 方法上,如下面的例子:Field(“cat“) public void setCategory(String c) this.categories = c; 创建 bean 实例Item

18、 item = new Item(); item.id = “one“; item.categories = new String “aaa“, “bbb“, “ccc“ ;添加给 Solrserver.addBean(item);将多个 bean 提交给 solrList beans ; /add Item objects to the list server.addBeans(beans);注意: 你可以重复使用SolrServer,这样可以提高性能。Reading Data from Solr 搜索获取 solrserver 的实例SolrServer server = getSolrS

19、erver();构造 SolrQuerySolrQuery query = new SolrQuery(); query.setQuery( “*:*“ ); query.addSortField( “price“, SolrQuery.ORDER.asc );向服务器发出查询请求QueryResponse rsp = server.query( query );获取结果。SolrDocumentList docs = rsp.getResults();想要以 javabean 的方式获取结果,那么这个 javabean 必须像之前的例子一样有 java 注释List beans = rsp.

20、getBeans(Item.class);高级用法solrJ 提供了一组 API,来帮助我们创建查询,下面是一个faceted query 的例子。SolrServer server = getSolrServer(); SolrQuery solrQuery = new SolrQuery(). setQuery(“ipod“). setFacet(true). setFacetMinCount(1). setFacetLimit(8). addFacetField(“category“). addFacetField(“inStock“); QueryResponse rsp = serv

21、er.query(solrQuery);所有的 setter/add 方法都是返回它自己本身的实例,所以就像你所看到的一样,上面的用法是链式的posted 2012-05-24 17:38 浪浪仔 阅读(99) 评论(0) 编辑Solr 入门之 SolrServer 实例化方式Solr3.6 版本SolrServer 实例化类型有httpClient,和本地化,如果 Solr服务器不在本地就用 httpClient,在本地就用 EmbeddedSolrServerSolrServer 可以操作索引,包括更新删除查询等操作以下是 httpClient 实例化方式,需要 tomcat 运行 Sol

22、r 服务1、ConcurrentUpdateSolrServer 实例化 SolrServer,该类实例化多用于更新删除索引操作ConcurrentUpdateSolrServer(String solrServerUrl, int queueSize, int threadCount)solrServerUrl 是 Solr 服务器的地址,queueSize 缓冲区大小threadCount 后台线程数2、HttpSolrServer 实例化SolrServer,该类实例化多用于查询操作HttpSolrServer(String baseURL)baseURL 是 Solr 的服务器地址3、

23、LBHttpSolrServer 实例化SolrServer,用于有多个 Solr 服务器,负载均衡LBHttpSolrServer(String. solrServerUrls)solrServerUrls 是多个 Solr 的服务器地址,用,号分隔以下是本地实例化,即项目包含Solr 服务,不需要 tomcat 运行Solr 服务EmbeddedSolrServerprivate static CoreContainer.Initializer initializer = null; private static CoreContainer coreContainer = null; pr

24、ivate static 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();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报