您的位置:首页 > 其它

使用solrj和EasyNet.Solr进行原子更新

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

使用solrj进行原子更新:

import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer
import org.apache.solr.common.SolrInputDocument

object SolrTest extends App {
val url = "http://localhost:8080/example/collection1"
val server = new ConcurrentUpdateSolrServer(url, 100, 3)

//init
//atomSet
atomAdd

def init = {
val doc = new SolrInputDocument()
doc.addField("id", "F8V7067-APL-KIT")
doc.addField("name", "Belkin Mobile Power Cord for iPod w/ Dock")
doc.addField("features", "car power adapter")
doc.addField("features", "white")

server.add(doc)
server.commit()
server.shutdown()
}

def atomSet = {
val doc = new SolrInputDocument()
doc.addField("id", "F8V7067-APL-KIT")

val setOper = new java.util.HashMap[String, String]()
setOper.put("set", "iPod & iPod Mini USB 2.0 Cable")

doc.addField("name", setOper)

server.add(doc)
server.commit()
server.shutdown()
}

def atomAdd = {
val doc = new SolrInputDocument()
doc.addField("id", "F8V7067-APL-KIT")

val addOper = new java.util.HashMap[String, String]()
addOper.put("add", "add a test feature")

doc.addField("features", addOper)

server.add(doc)
server.commit()
server.shutdown()
}
}


使用EasyNet.Solr进行原子更新:

using EasyNet.Solr.Commons;
using EasyNet.Solr.Impl;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Web.Mvc;

namespace EasyNet.Solr.Website.Controllers
{
public class IndexController : Controller
{
private OptimizeOptions optimizeOptions = new OptimizeOptions();
private ISolrResponseParser<NamedList, ResponseHeader> binaryResponseHeaderParser = new BinaryResponseHeaderParser();
private IUpdateParametersConvert<NamedList> updateParametersConvert = new BinaryUpdateParametersConvert();
private ISolrUpdateConnection<NamedList, NamedList> solrUpdateConnection = new SolrUpdateConnection<NamedList, NamedList>() { ServerUrl = "http://localhost:8080/example/collection1", ContentType = "application/javabin" };
private ISolrUpdateOperations<NamedList> updateOperations;

public IndexController()
{
updateOperations = new SolrUpdateOperations<NamedList, NamedList>("/update", solrUpdateConnection, updateParametersConvert) { ResponseWriter = "javabin" };
}
//
// GET: /Index/

public ActionResult Index()
{
//Init();
//AtomSet();
AtomAdd();

return View();
}

private void Init()
{
var docs = new List<SolrInputDocument>();
var doc = new SolrInputDocument();
doc.Add("id", new SolrInputField("id", "F8V7067-APL-KIT"));
doc.Add("name", new SolrInputField("name", "Belkin Mobile Power Cord for iPod w/ Dock"));
doc.Add("features", new SolrInputField("features", new String[] { "car power adapter", "white" }));

docs.Add(doc);

var result = updateOperations.Update(new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
var header = binaryResponseHeaderParser.Parse(result);

Response.Write(string.Format("Update Status:{0} QTime:{1}</br>", header.Status, header.QTime));
}

private void AtomSet()
{
var docs = new List<SolrInputDocument>();
var doc = new SolrInputDocument();
doc.Add("id", new SolrInputField("id", "F8V7067-APL-KIT"));

var setOper = new Hashtable();
setOper.Add("set", "iPod & iPod Mini USB 2.0 Cable");

doc.Add("name", new SolrInputField("name", setOper));

docs.Add(doc);

var result = updateOperations.Update(new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
var header = binaryResponseHeaderParser.Parse(result);

Response.Write(string.Format("Update Status:{0} QTime:{1}</br>", header.Status, header.QTime));
}

private void AtomAdd()
{
var docs = new List<SolrInputDocument>();
var doc = new SolrInputDocument();
doc.Add("id", new SolrInputField("id", "F8V7067-APL-KIT"));

var addOper = new Hashtable();
addOper.Add("add", "add a test feature ");

doc.Add("features", new SolrInputField("features", addOper));

docs.Add(doc);

var result = updateOperations.Update(new UpdateOptions() { OptimizeOptions = optimizeOptions, Docs = docs });
var header = binaryResponseHeaderParser.Parse(result);

Response.Write(string.Format("Update Status:{0} QTime:{1}</br>", header.Status, header.QTime));
}

}

}


希望对大家有所帮助,也希望大家关注和使用EasyNet.Solr,如有任何关于Solr、Lucene、EasyNet.Solr等等问题,都可以加入EasyNet开源项目QQ群:181963043。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: