zoukankan      html  css  js  c++  java
  • 使用solrj和EasyNet.Solr进行原子更新

    Solr 4.0(http://lucene.apache.org/solr/)已经发布了有一段时间了,其中Solr 4.0中有一个不错的特性:Atom Update,也就是原子更新。有了原子更新这个东东,我们就可以只更新某个字段。下面的代码演示了如何用solrj和EasyNet.Solr(http://easynet.codeplex.com)进行原子更新。

    使用solrj进行原子更新:

     1 import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer
     2 import org.apache.solr.common.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.commit()
    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.commit()
    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.commit()
    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 &amp; 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。

  • 相关阅读:
    『NiFi 节点本地流与集群流不一致导致集群加入失败』问题解决
    『NiFi 学习之路』简介
    『NiFi 学习之路』自定义 —— 组件的自定义及使用
    『NiFi 学习之路』使用 —— 主要组件的使用
    『NiFi 学习之路』把握 —— 架构及主要部件
    TabLayout与ViewPager同步后Tab的标题不显示
    Word 为标题设置段前段后间距设置与异常
    Word 中将正文中的参考文件标号链接到参考文献具体条目
    Linux字体美化实战(Fontconfig配置)(转)
    Linux字体美化实战(Fontconfig配置)(转)
  • 原文地址:https://www.cnblogs.com/TerryLiang/p/2809352.html
Copyright © 2011-2022 走看看