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 docs = new ArrayList();
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 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 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 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 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 highlightSnippets = queryResponse.getHighlighting().get(id).get("content");  

19.     }  

20.   } 

 

转载:http://blog.sina.com.cn/s/blog_5ddc071f0100ol5s.html

你可能感兴趣的:(Solr增删改查)