solr 利用cul或solr界面单值更新
本文主要是指利用solr界面或cul的更新solr的值。如果需要代码中单值更新请参考黎明露珠的博客链接:http://www.cnblogs.com/limingluzhu/p/5535314.html,我在文章的最末也给出了代码单值更新的示例。
在实际的研发过程中,为方便测试往往需要更改solr字段值,但是除了依赖程序的更新solr本身界面是否支持我们进行solr字段的值更新呢 ,答案是肯定支持的 。
详细方法请参考连接:http://yonik.com/solr/atomic-updates/
实际就是我们solr query的documents:
其示例documents 修改值方法如下 :
{ "ADDRESSID": "89fe3cffd70311e681c8fa163ea75434", "MEMBERTYPE": { "set": "1" } }
我这的 示例是json类型的,但是原理都一样的 。
这里的commit,可以理解为一个拼装起来的 get请求.当然你也可以用curl来直接请求。具体示例便是下文的curl请求。
关于具体语法问题原文如下:
Solr supports several modifiers that atomically update values of a document.
set
– set or replace a particular value, or remove the value ifnull
is specified as the new valueadd
– adds an additional value to a listremove
– removes a value (or a list of values) from a listremoveregex
– removes from a list that match the given Java regular expressioninc
– increments a numeric value by a specific amount (use a negative value to decrement)
具体示例原文如下:
Update Modifier Example
First, let’s add a document representing a book:
$ curl http://localhost:8983/solr/demo/update -d ' [ {"id" : "book1", "title_t" : "Snow Crash", // text field "copies_i" : 5, "cat_ss" : "Science Fiction" // multi-valued string field } ]'
Now we can update that document, adding the author field, incrementing the number of copies we have, and adding an additional category:
$ curl http://localhost:8983/solr/demo/update -d ' [ {"id" : "book1", "author_s" : {"set":"Neal Stephenson"}, "copies_i" : {"inc":3}, "cat_ss" : {"add":"Cyberpunk"} } ]'
Now if we retrieve the document using real-time get, we will see the updated fields:
$ curl http://localhost:8983/solr/demo/get?id=book1
{
"doc"
: {
"id"
:
"book1"
,
"title_t"
:[
"Snow Crash"
],
"copies_i"
:8,
"cat_ss"
:[
"Science Fiction"
,
"Cyberpunk"
],
"author_s"
:
"Neal Stephenson"
,
"_version_"
:1408729977723027456}}
And finally, remove
“Cyberpunk” from the cat field:
$ curl http://localhost:8983/solr/demo/update -d ' [ {"id" : "book1", "cat" : {"remove":"Cyberpunk"} } ]'
Atomic Updates with SolrJ
Here is an example of how to do a partial update via Solr’s Java client, SolrJ:
// create the SolrJ client HttpSolrClient client = new HttpSolrClient("http://localhost:8983/solr"); // create the document SolrInputDocument sdoc = new SolrInputDocument(); sdoc.addField("id","book1"); Map<String,Object> fieldModifier = new HashMap<>(1); fieldModifier.put("add","Cyberpunk"); sdoc.addField("cat", fieldModifier); // add the map as the field value client.add( sdoc ); // send it to the solr server client.close(); // shutdown client before we exit
CloudSolrClient server = new CloudSolrClient(ZkHost); server.setParser(new XMLResponseParser()); SolrInputDocument doc = new SolrInputDocument(); Map<String, String> partialUpdate = new HashMap<String, String>(); partialUpdate.put("set", memberType); doc.addField("ADDRESSID", addressId);//主键 doc.addField("MEMBERTYPE", partialUpdate); doc.addField("LATESTUSETIME", DateUtils.getNow());