设为首页 收藏本站
查看: 909|回复: 0

[经验分享] Solr增删改查

[复制链接]

尚未签到

发表于 2016-12-15 10:11:32 | 显示全部楼层 |阅读模式
Solr增删改查



  1、solrserver的获取
1.1CommonsHttpSolrServer
CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。
  Java代码
1.String url = “http://localhost:8983/solr”;
2.SolrServer server = new CommonsHttpSolrServer( url );
Setting XMLResponseParser
sorlr J 目前使用二进制的格式作为默认的格式。对于solr1.2的用户通过显示的设置才能使用XML格式。
  Java代码
1.server.setParser(new XMLResponseParser());
Changing other Connection Settings
CommonsHttpSorlrServer 允许设置链接属性。
  Java代码
1.String url = “http://localhost:8983/solr”
2.CommonsHttpSolrServer server = new CommonsHttpSolrServer( url);
3.server.setSoTimeout(1000); // socket read timeout
4.server.setConnectionTimeout(100);
5.server.setDefaultMaxConnectionsPerHost(100);
6.server.setMaxTotalConnections(100);
7.server.setFollowRedirects(false); // defaults to false
8.// allowCompression defaults to false.
9.// Server side must support gzip or deflate for this to have anyeffect.
10.server.setAllowCompression(true);
11.server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
1.2EmbeddedSolrServer
EmbeddedSorrServer提供和CommonsHttpSorlrServer相同的接口,它不需要http连接。
  Java代码
1.SolrCore core = SolrCore.getSolrCore();
2.SolrServer server = new EmbeddedSolrServer( core );
3.…
如果你想要使用 Multicore 特性,那么你可以这样使用:
  Java代码
1.File home = new File( getSolrHome() );
2.File f = new File( home, “solr.xml” );
3.multicore.load( getSolrHome(), f );
4.EmbeddedSolrServer server = new EmbeddedSolrServer(multicore,“core name as defined in solr.xml” );
如果你在你的项目中内嵌solr服务,这将是一个不错的选择。无论你能否使用http,它都提供相同的接口。
  用法
solrj 被设计成一个可扩展的框架,用以向solr服务器提交请求,并接收回应。
  我们已经将最通用的一些命令封装在了solrServer类中了。
  2.Adding Data to Solr
·首先需要获得一个server的实例,
Java代码
1.SolrServer server = getSolrServer();
·如果,你使用的是一个远程的solrServer的话呢,你或许会这样来实现getSolrServer()这个方法:
Java代码
1.public SolrServer getSolrServer(){
2.//the instance can be reused
3.return new CommonsHttpSolrServer();
4.}
·如果,你使用的是一个本地的solrServer的话,你或许会这样来实现getSolrServer()方法:
Java代码
1.public SolrServer getSolrServer(){
2.//the instance can be reused
3.return new EmbeddedSolrServer();
4.}
·如果,你在添加数据之前,想清空现有的索引,那么你可以这么做:
Java代码
1.server.deleteByQuery( “*:*” );// delete everything!
·构造一个document
Java代码 SolrInputDocument doc1 = new SolrInputDocument();
1.doc1.addField( “id”, “id1″, 1.0f );
2.doc1.addField( “name”, “doc1″, 1.0f );
3.doc1.addField( “price”, 10 );
·构造另外一个文档,每个文档都能够被独自地提交给solr,但是,批量提交是更高效的。每一个对SolrServer的请求都是http请求,当然对于EmbeddedSolrServer来说,是不一样的。
Java代码
1.SolrInputDocument doc2 = new SolrInputDocument();
2.doc2.addField( “id”, “id2″, 1.0f );
3.doc2.addField( “name”, “doc2″, 1.0f );
4.doc2.addField( “price”, 20 );
·构造一个文档的集合
Java代码
1.Collection<SolrInputDocument> docs= newArrayList<SolrInputDocument>();
2.docs.add( doc1 );
3.docs.add( doc2 );
·将documents提交给solr
Java代码
1.server.add( docs );
·提交一个commit
Java代码
1.server.commit();
·在添加完documents后,立即做一个commit,你可以这样来写你的程序:
Java代码
1.UpdateRequest req = new UpdateRequest();
2.req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
3.req.add( docs );
4.UpdateResponse rsp = req.process( server );
3.Directly adding POJOs to Solr
·使用 java 注释创建java bean。@Field,可以被用在域上,或者是setter方法上。如果一个域的名称跟bean的名称是不一样的,那么在java注释中填写别名,具体的,可以参照下面的域categories
Java代码
1.import org.apache.solr.client.solrj.beans.Field;
2.public class Item {
3.@Field
4.String id;
5.@Field(“cat”)
6.String[] categories;
7.@Field
8.List<String> features;
9.}
·java注释也可以使用在setter方法上,如下面的例子:
Java代码
1.@Field(“cat”)
2.public void setCategory(String[] c){
3.this.categories = c;
4.}
这里应该要有一个相对的,get方法(没有加java注释的)来读取属性
  ·Get an instance of server
Java代码
1.SolrServer server = getSolrServer();
·创建bean实例
Java代码
1.Item item = new Item();
2.item.id = “one”;
3.item.categories =  new String[] { “aaa”, “bbb”,“ccc” };
·添加给solr
Java代码
1.server.addBean(item);
·将多个bean提交给solr
Java代码
1.List<Item> beans ;
2.//add Item objects to the list
3.server.addBeans(beans);
注意: 你可以重复使用SolrServer,这样可以提高性能。
  4.Reading Data from Solr
·获取solrserver的实例
Java代码
1.SolrServer server = getSolrServer();
·构造 SolrQuery
Java代码
1.SolrQuery query = new SolrQuery();
2.query.setQuery( “*:*” );
3.query.addSortField( “price”, SolrQuery.ORDER.asc );
·向服务器发出查询请求
Java代码
1.QueryResponse rsp = server.query( query );
·获取结果。
Java代码
1.SolrDocumentList docs = rsp.getResults();
·想要以javabean的方式获取结果,那么这个javabean必须像之前的例子一样有java注释。
Java代码
1.List<Item> beans =rsp.getBeans(Item.class);
5.高级用法
solrJ 提供了一组API,来帮助我们创建查询,下面是一个faceted query的例子。
  Java代码
1.SolrServer server = getSolrServer();
2.SolrQuery solrQuery = new SolrQuery().
3.setQuery(“ipod”).
4.setFacet(true).
5.setFacetMinCount(1).
6.setFacetLimit(8).
7.addFacetField(“category”).
8.addFacetField(“inStock”);
9.QueryResponse rsp = server.query(solrQuery);
所有的 setter/add 方法都是返回它自己本身的实例,所以就像你所看到的一样,上面的用法是链式的。
  Highlighting
Highlighting parameters are set like other common parameters.
  view plaincopy toclipboardprint?01.SolrQuery query = newSolrQuery();  
  02.  query.setQuery("foo");  
  03. 
  04.  query.setHighlight(true).setHighlightSnippets(1); //set otherparams as needed  
  05.   query.setParam("hl.fl","content");  
  06. 
  07.   QueryResponsequeryResponse =getSolrServer().query(query);  
  08.hen to get back the highlight results you need something likethis:  
  09.  Iterator<SolrDocument> iter =queryResponse.getResults().iterator();  
  10. 
  11.   while (iter.hasNext()){  
  12.    SolrDocument resultDoc =iter.next();  
  13. 
  14.    String content = (String)resultDoc.getFieldValue("content");  
  15.    String id = (String) resultDoc.getFieldValue("id"); //id is theuniqueKey field  
  16. 
  17.    if (queryResponse.getHighlighting().get(id) != null){  
  18.      List<String> highlightSnippets =queryResponse.getHighlighting().get(id).get("content");  
  19.    }  
  20.   } 
  转载:http://blog.sina.com.cn/s/blog_5ddc071f0100ol5s.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314628-1-1.html 上篇帖子: solr 分词 后 结果 下篇帖子: [ppt] elasticsearch vs solr
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表