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 if null is specified as the new value
  • add – adds an additional value to a list
  • remove – removes a value (or a list of values) from a list
  • removeregex – removes from a list that match the given Java regular expression
  • inc – 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

 

 solr代码单值更新示例:
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());

 

posted @ 2017-02-21 20:46  别问1991  阅读(743)  评论(0编辑  收藏  举报