1.6.5 Updating Parts of Documents
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_字段.
一般情况下,使用开放式并发包含以下工作流程:
- 客户端读取一个文档,在solr中,可以通过/get句柄来检索文档确保具有最新的版本.
- 客户端在本地更改文档.
- 客户端重新发送更新的文档给solr.如使用/update句柄.
- 如果有版本冲突(HTTP error code 409),客户端重新开始处理.
当客户端重新发送改变的文档给solr时,_version_会被包含在update中用来调用开放式并发控制.在文档被更新或者报告一个冲突时,指定使用的机制.
- 如果_version_大于'1'的话,如'12345',文档中的_version_必须和索引的版本匹配.
- 如果_version_等于'1'的话,这个文档必须简单存在,在这种情况下,没有版本匹配发生,如果文档不存在,更新将会被拒绝.
- 如果_version_小于'0'的话,如'-1',那么文档必须不存在,在这种情况下没有版本匹配发生.但是如果文档存在,更新将被拒绝.
- 如果_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.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 ...
- 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. ...
- multi-CPU, multi-core and hyper-thread--转
原文地址:http://stackoverflow.com/questions/680684/multi-cpu-multi-core-and-hyper-thread Multi-CPU was t ...
- Amazon onsite behavior question
https://www.1point3acres.com/bbs/thread-307462-1-1.html http://kraftshala.com/how-to-raise-the-bar-i ...
- SAP 经常使用T-CODE
Plant Maintenance (PM) IW32 - Change Plant Maintenance Order IW33 - Display Plant Maintenance Order ...
- SharePoint 2010 搜索结果没有显示部分文件
Why SharePoint 2010 search does not show some results? SharePoint 2010 search is better than ever ...
- SAP T CODE : Description (Program)
SAP T CODE : Description (Program) V : Quickstart RKCOWUSL (RKCOWUSL)V+01 : Create Sales Call (SAPMV ...
- (十一)Updating Documents
In addition to being able to index and replace documents, we can also update documents. Note though ...
- coffeescript 1.8.0 documents
CoffeeScript is a little language that compiles into JavaScript. Underneath that awkward Java-esque ...
随机推荐
- MYSQL数据库重点:事务与锁机制
一.事务 一组连续的数据库操作,每一次操作都成功,整个事务就成功,只要有一步出错,整个事务就失败: MySQL事务与存储引擎相关 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB: ...
- python windows错误码
在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问 在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问.那么是删除权限不够?用管理员 ...
- UIView UITableView 背景图片添加
这几天,经常用到为某个视图设置背景图片,而API中UIView没有设置背景图片的方法,搜集归纳如下: 第一种方法: 利用的UIView的设置背景颜色方法,用图片做图案颜色,然后传给背景颜色. UICo ...
- FZU 2129 子序列个数 (递推dp)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - ...
- Codeforces 707 E. Garlands (二维树状数组)
题目链接:http://codeforces.com/problemset/problem/707/E 给你nxm的网格,有k条链,每条链上有len个节点,每个节点有一个值. 有q个操作,操作ask问 ...
- UI进阶 FMDB
一.FMDB简介 1.FMDB简介 iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较繁琐.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB. ...
- JQuery 的bind和unbind函数
测试:页面代码:<body> <input type="button" name="aaa" value="点击我" ...
- android 48dp美化
48dp
- box-shadow 同时有内阴影和外发光效果
box-shadow: 0px 0px 10px rgba(0,0,0,0.8) inset,0px 0px 5px rgba(200,200,200,0.5);
- Ceph Jewel 10.2.3 环境部署
Ceph 测试环境部署 本文档内容概要 测试环境ceph集群部署规划 测试环境ceph集群部署过程及块设备使用流程 mon节点扩容及osd节点扩容方法 常见问题及解决方法 由于暂时没有用到对象存储,所 ...