1. Updating Parts of Documents

  有时候你想要直接改变solr文档中的部分内容,solr有两种合适的方法来改变.

  第一种:自动更新,这个方法允许仅仅改变文档的一个或者几个字段,而不需要重建整个文档的索引.

  第二种:叫做开放式并发或者是乐观锁机制.它是许多NoSQL数据库的一个功能.允许基于它的版本有条件式的更新一个文档.这个方法中包含了如何处理版本处理匹配和不匹配的语义和规则.

  自动更新和开放式并发即可以作为一个单独的策略来更新文档,也可以联合使用:可以使用开放式并发来有条件的自动更新.

1.1 Atomic Updates

  solr允许部分更新,即自动更新文档的值.这种方式可以加快索引处理速度.

Modifier 使用
set 设置或更换一个特定的值,如果新的值指定为'null'的话,删除这个字段.
add 添加一个新的值到这个列表中
inc 增加一个特定量的数字的值

  例子:

{"id":"mydoc", "f1"{"set":}, "f2"{"add":}}

1.2 Optimistic Concurrency

  开放式并发,是客户端可以使用的用来更新/替换文档的功能.确保其他客户端没有并发修改这个正在更新/替换的文档.这个功能的工作要求文档中有一个field _version_字段.

  一般情况下,使用开放式并发包含以下工作流程:

  1. 客户端读取一个文档,在solr中,可以通过/get句柄来检索文档确保具有最新的版本.
  2. 客户端在本地更改文档.
  3. 客户端重新发送更新的文档给solr.如使用/update句柄.
  4. 如果有版本冲突(HTTP error code 409),客户端重新开始处理.

  当客户端重新发送改变的文档给solr时,_version_会被包含在update中用来调用开放式并发控制.在文档被更新或者报告一个冲突时,指定使用的机制.

  1. 如果_version_大于'1'的话,如'12345',文档中的_version_必须和索引的版本匹配.
  2. 如果_version_等于'1'的话,这个文档必须简单存在,在这种情况下,没有版本匹配发生,如果文档不存在,更新将会被拒绝.
  3. 如果_version_小于'0'的话,如'-1',那么文档必须不存在,在这种情况下没有版本匹配发生.但是如果文档存在,更新将被拒绝.
  4. 如果_version_等于'0'的话,那么版本是否匹配,文档是否存在就没有什么关系了,如果存在,将会被重写,如果不存在,将会被覆盖.

  如果文档更新不包含_version_字段,自动更新将不会被使用,文档将被当作普通solr规则来对待.

  对于更多的信息参考 Yonik Seeley's presentation on NoSQL features in Solr4

提示:

  _version_字段默认存储在反转索引中(indexed="true").然而,对于具有大量文档的系统,增加FieldCache内存可能成本太大了.一个解决方法就是声明_version_为DocValues.基于磁盘的.

  例子:

<field name="_version_" type="ondisk_docval_long" indexed="false"
stored="true" required="true" docValues="true" />
<fieldType name="ondisk_docval_long" class="solr.TrieLongField"
precisionStep="0" positionIncrementGap="0" docValuesFormat="Disk" />

1.3 Document Centric Versioning Constraints

  以文档为中心的版本限制.

  开放式并发(乐观锁)是非常强大,作用是非常有效的,因为它使用了一个指定的,全局唯一的值给_version_字段.尽管如此,用户有些情况下想要自己配置version字段.

1.6.5 Updating Parts of Documents的更多相关文章

  1. 1.6 Indexing and Basic Data Operations--目录

    1.6.1 什么是 Indexing 1.6.2 Uploading Data with Index Handlers 1.6.3 Uploading Data with Solr Cell usin ...

  2. solr 从零学习开始

    2010-10 目 录 1 1.1 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4. ...

  3. multi-CPU, multi-core and hyper-thread--转

    原文地址:http://stackoverflow.com/questions/680684/multi-cpu-multi-core-and-hyper-thread Multi-CPU was t ...

  4. Amazon onsite behavior question

    https://www.1point3acres.com/bbs/thread-307462-1-1.html http://kraftshala.com/how-to-raise-the-bar-i ...

  5. SAP 经常使用T-CODE

    Plant Maintenance (PM) IW32 - Change Plant Maintenance Order  IW33 - Display Plant Maintenance Order ...

  6. SharePoint 2010 搜索结果没有显示部分文件

    Why SharePoint 2010 search does not show some results?   SharePoint 2010 search is better than ever ...

  7. SAP T CODE : Description (Program)

    SAP T CODE : Description (Program) V : Quickstart RKCOWUSL (RKCOWUSL)V+01 : Create Sales Call (SAPMV ...

  8. (十一)Updating Documents

    In addition to being able to index and replace documents, we can also update documents. Note though ...

  9. coffeescript 1.8.0 documents

    CoffeeScript is a little language that compiles into JavaScript. Underneath that awkward Java-esque ...

随机推荐

  1. MYSQL数据库重点:事务与锁机制

    一.事务 一组连续的数据库操作,每一次操作都成功,整个事务就成功,只要有一步出错,整个事务就失败: MySQL事务与存储引擎相关 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB: ...

  2. python windows错误码

    在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问 在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问.那么是删除权限不够?用管理员 ...

  3. UIView UITableView 背景图片添加

    这几天,经常用到为某个视图设置背景图片,而API中UIView没有设置背景图片的方法,搜集归纳如下: 第一种方法: 利用的UIView的设置背景颜色方法,用图片做图案颜色,然后传给背景颜色. UICo ...

  4. FZU 2129 子序列个数 (递推dp)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - ...

  5. Codeforces 707 E. Garlands (二维树状数组)

    题目链接:http://codeforces.com/problemset/problem/707/E 给你nxm的网格,有k条链,每条链上有len个节点,每个节点有一个值. 有q个操作,操作ask问 ...

  6. UI进阶 FMDB

    一.FMDB简介 1.FMDB简介 iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较繁琐.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB. ...

  7. JQuery 的bind和unbind函数

    测试:页面代码:<body>     <input type="button" name="aaa" value="点击我" ...

  8. android 48dp美化

    48dp

  9. box-shadow 同时有内阴影和外发光效果

    box-shadow: 0px 0px 10px rgba(0,0,0,0.8) inset,0px 0px 5px rgba(200,200,200,0.5);

  10. Ceph Jewel 10.2.3 环境部署

    Ceph 测试环境部署 本文档内容概要 测试环境ceph集群部署规划 测试环境ceph集群部署过程及块设备使用流程 mon节点扩容及osd节点扩容方法 常见问题及解决方法 由于暂时没有用到对象存储,所 ...