`
yinwufeng
  • 浏览: 285270 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Solr增删改查

阅读更多

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 any effect.
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 = new ArrayList<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 to clipboardprint?01.SolrQuery query = new SolrQuery();  

02.   query.setQuery("foo");  

03. 

04.   query.setHighlight(true).setHighlightSnippets(1); //set other params as needed  

05.   query.setParam("hl.fl", "content");  

06. 

07.   QueryResponse queryResponse = getSolrServer().query(query);  

08.hen to get back the highlight results you need something like this:  

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 the uniqueKey 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

分享到:
评论
2 楼 星期扒的幻想 2012-06-08  
学习了,了解了
1 楼 xjt927 2011-09-17  

相关推荐

    solr的增删改查和高亮以及分组

    本文将深入探讨Solr 3.6版本中的核心功能:增删改查(CRUD)操作,高亮显示,以及分组查询。 ### 1. Solr的增删改查操作 #### 1.1 创建(Create) 在Solr中,创建文档通常涉及到定义一个XML或JSON格式的文档结构...

    1.3、索引库使用的增删改查,以及数据库的连接导入1

    【数据库索引库的增删改查】 在数据库管理中,索引库是提升查询效率的关键,特别是对于大型数据集,它可以显著加快数据检索的速度。本文主要探讨索引库的常用操作,包括增、删、改、查以及数据库的连接与导入。 1....

    SpringBoot-sel-del-up-add:SpringBoot实现简单的增删改查,并集成了Redis,Solr

    SpringBoot-sel-del-up-addSpringBoot实现简单的增删改查1.本项目是基于postman进行测试的,大家也可以自己写一下页面项目创建后,下载jar很容易出错,所以大家要提前配置好maven,多更新几次

    Solr 搜索引擎 asp.net实现 示例详细操作步骤

    我们网站搜索如果数据量大的话,我们使用数据库直接查搜索会很慢,而且由于不能自动分词,结果往往不是很理想,现在我提供了一个例子,内含详细操作步骤和简单增删改查 Solr是一个独立的企业级搜索应用服务器,它...

    Solr项目源码及solr资源包

    10. **实战演练**:通过这个项目,你可以学习如何创建Solr索引,如何编写Solr查询,如何使用Spring Data Solr进行数据的增删改查,以及如何优化搜索性能。 通过深入研究和实践这个“Solr项目源码及solr资源包”,...

    spring-data-solr:通过spring对solr数据的增删该查,进行封装

    **Spring Data Solr:通过Spring对Solr数据的增删改查封装** Spring Data Solr是Spring Data项目的一部分,它为Apache Solr搜索引擎提供了一种简单而强大的集成方式。Spring Data Solr允许开发者利用Spring框架的...

    最新版linux solr-8.8.2.tgz

    了解这些基础知识后,你就可以开始探索 Solr 8.8.2 的高级特性,如实时增删改查、多字段排序、高亮显示、同义词处理、地理位置搜索以及更复杂的查询表达式等。通过熟练掌握 Solr,你将能够构建强大而高效的全文搜索...

    solr4.4.0入门配置步骤

    Solr提供了一个用户友好的界面来对索引进行增删改查操作,同时支持分页、过滤、自动高亮等功能,广泛应用于各种大型网站的搜索功能。Solr4.4.0是Solr的一个版本号,本篇文章将介绍如何安装和配置Solr4.4.0来搭建一个...

    SSM+spring-data-solr+solr7.7 全文搜索代码

    - 使用Spring Data Solr提供的`SolrTemplate`或者Repository接口,进行索引的增删改查操作。 - 将业务数据同步到Solr,构建索引,以供搜索使用。 - 在SpringMVC的Controller层处理前端请求,调用Repository接口...

    SOLR的学习资料

    在这个“SOLR的学习资料”中,我们将深入探讨如何进行SOLR的环境搭建、以及如何执行基本的增删改查操作。 **一、SOLR环境搭建** 1. **系统要求**:SOLR可以在多种操作系统上运行,包括Windows、Linux和Mac OS。...

    solr-8.1.1-src.tgz

    5. **文档增删改查(CRUD)**: - 使用HTTP接口,通过XML、JSON或CSV格式提交文档进行索引。 - 更新文档时,Solr支持替换、追加和删除操作。 6. **搜索结果排序与评分**: - 可以自定义排序规则,基于相关性、...

    solr-config_solrj-demo.rar_DEMO_solr_solr的j

    除了基础功能,Solr还有许多高级特性,如实时增删改查( Near Realtime Searching, NRT)、复杂查询表达式、自定义插件(如过滤器、查询解析器等)、地理位置搜索(Geospatial Search)等。DEMO可能涵盖了其中的一...

    solr5.5.4项目示例

    在本示例中,可能已经配置了DIH来导入数据,并进行了增、删、改操作。 4. **添加索引**:向Solr添加文档(即索引)通常涉及序列化数据为Solr可理解的格式,然后使用HTTP POST请求发送到Solr服务器。在本例中,你...

    solr在java中使用总结

    - 调用SolrServer对象的方法进行索引数据的增删改查操作。 - 增加索引示例代码(简化版): ```java SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "doc1"); doc.addField("name", ...

    hive-solr-master.zip_hive_solr_solr-hive

    这样,当我们在Hive中对数据进行增删改查操作时,这些操作会同步反映到Solr的索引中。例如,我们可以使用以下HQL(Hive Query Language)命令创建一个与Solr同步的外部表: ```sql CREATE EXTERNAL TABLE solr_...

    solr_api

    Solr API 是Apache Solr的核心组成部分,它提供了一组丰富的HTTP接口,允许用户与Solr索引进行交互,包括查询、文档的增删改查、配置管理等操作。Solr作为一个强大的全文搜索引擎,广泛应用于各类大数据量、高性能的...

    php与solr交互扩展库包

    标题中的“php与solr交互扩展库包”指的是PHP与Apache Solr搜索引擎之间的一个扩展库,这个库使得在PHP环境中可以方便地与Solr服务进行数据的增删查改操作。Solr是一款强大的、高性能的全文检索服务器,常用于大型...

    solr在SSM框架中使用(支持中文分词查询)

    接着,我们可以创建一个SolrService类,该类使用SolrServer对象进行索引的增删改查操作。 对于中文分词查询,我们需要在Solr的schema.xml文件中设置字段类型为支持中文分词的类型。例如,使用IK Analyzer,我们需要...

Global site tag (gtag.js) - Google Analytics