使用solrj和EasyNet.Solr进行原子更新
Solr 4.0(http://lucene.apache.org/solr/)已经发布了有一段时间了,其中Solr 4.0中有一个不错的特性:Atom Update,也就是原子更新。有了原子更新这个东东,我们就可以只更新某个字段。下面的代码演示了如何用solrj和EasyNet.Solr(http://easynet.codeplex测试数据)进行原子更新。
使用solrj进行原子更新:
1 import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer
2 import org.apache.solr测试数据mon.SolrInputDocument
3
4 object SolrTest extends App {
5 val url = "http://localhost:8080/example/collection1"
6 val server = new ConcurrentUpdateSolrServer(url, 100, 3 )
7
8 // init
9 // atomSet
10 atomAdd
11
12 def init = {
13 val doc = new SolrInputDocument()
14 doc.addField("id", "F8V7067-APL-KIT" )
15 doc.addField("name", "Belkin Mobile Power Cord for iPod w/ Dock" )
16 doc.addField("features", "car power adapter" )
17 doc.addField("features", "white" )
18
19 server.add(doc)
20 server测试数据mit()
21 server.shutdown()
22 }
23
24 def atomSet = {
25 val doc = new SolrInputDocument()
26 doc.addField("id", "F8V7067-APL-KIT" )
27
28 val setOper = new java.util.HashMap[String, String]()
29 setOper.put("set", "iPod & iPod Mini USB 2.0 Cable" )
30
31 doc.addField("name" , setOper)
32
33 server.add(doc)
34 server测试数据mit()
35 server.shutdown()
36 }
37
38 def atomAdd = {
39 val doc = new SolrInputDocument()
40 doc.addField("id", "F8V7067-APL-KIT" )
41
42 val addOper = new java.util.HashMap[String, String]()
43 addOper.put("add", "add a test feature" )
44
45 doc.addField("features" , addOper)
46
47 server.add(doc)
48 server测试数据mit()
49 server.shutdown()
50 }
51 }
使用EasyNet.Solr进行原子更新:
1 using EasyNet.Solr.Commons;
2 using EasyNet.Solr.Impl;
3 using System;
4 using System.Collections;
5 using System.Collections.Generic;
6 using System.Web.Mvc;
7
8 namespace EasyNet.Solr.Website.Controllers
9 {
10 public class IndexController : Controller
11 {
12 private OptimizeOptions optimizeOptions = new OptimizeOptions();
13 private ISolrResponseParser<NamedList, ResponseHeader> binaryResponseHeaderParser = new BinaryResponseHeaderParser();
14 private IUpdateParametersConvert<NamedList> updateParametersConvert = new BinaryUpdateParametersConvert();
15 private ISolrUpdateConnection<NamedList, NamedList> solrUpdateConnection = new SolrUpdateConnection<NamedList, NamedList>() { ServerUrl = " http://localhost:8080/example/collection1 " , ContentType = " application/javabin " };
16 private ISolrUpdateOperations<NamedList> updateOperations;
17
18 public IndexController()
19 {
20 updateOperations = new SolrUpdateOperations<NamedList, NamedList>( " /update " , solrUpdateConnection, updateParametersConvert) { ResponseWriter = " javabin " };
21 }
22 //
23 // GET: /Index/
24
25 public ActionResult Index()
26 {
27 // Init();
28 // AtomSet();
29 AtomAdd();
30
31 return View();
32 }
33
34 private void Init()
35 {
36 var docs = new List<SolrInputDocument> ();
37 var doc = new SolrInputDocument();
38 doc.Add( " id " , new SolrInputField( " id " , " F8V7067-APL-KIT " ));
39 doc.Add( " name " , new SolrInputField( " name " , " Belkin Mobile Power Cord for iPod w/ Dock " ));
40 doc.Add( " features " , new SolrInputField( " features " , new String[] { " car power adapter " , " white " }));
41
42 docs.Add(doc);
43
44 var result = updateOperations.Update( new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
45 var header = binaryResponseHeaderParser.Parse(result);
46
47 Response.Write( string .Format( " Update Status:{0} QTime:{1}</br> " , header.Status, header.QTime));
48 }
49
50 private void AtomSet()
51 {
52 var docs = new List<SolrInputDocument> ();
53 var doc = new SolrInputDocument();
54 doc.Add( " id " , new SolrInputField( " id " , " F8V7067-APL-KIT " ));
55
56 var setOper = new Hashtable();
57 setOper.Add( " set " , " iPod & iPod Mini USB 2.0 Cable " );
58
59 doc.Add( " name " , new SolrInputField( " name " , setOper));
60
61 docs.Add(doc);
62
63 var result = updateOperations.Update( new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
64 var header = binaryResponseHeaderParser.Parse(result);
65
66 Response.Write( string .Format( " Update Status:{0} QTime:{1}</br> " , header.Status, header.QTime));
67 }
68
69 private void AtomAdd()
70 {
71 var docs = new List<SolrInputDocument> ();
72 var doc = new SolrInputDocument();
73 doc.Add( " id " , new SolrInputField( " id " , " F8V7067-APL-KIT " ));
74
75 var addOper = new Hashtable();
76 addOper.Add( " add " , " add a test feature " );
77
78 doc.Add( " features " , new SolrInputField( " features " , addOper));
79
80 docs.Add(doc);
81
82 var result = updateOperations.Update( new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
83 var header = binaryResponseHeaderParser.Parse(result);
84
85 Response.Write( string .Format( " Update Status:{0} QTime:{1}</br> " , header.Status, header.QTime));
86 }
87
88 }
89
90 }
希望对大家有所帮助,也希望大家关注和使用EasyNet.Solr,如有任何关于Solr、Lucene、EasyNet.Solr等等问题,都可以加入EasyNet开源项目QQ群:181963043。
分类: .Net , Lucene
标签: lucene , Solr 4.0 , Atom Update , 原子更新
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于使用solrj和EasyNet.Solr进行原子更新的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did47461