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. VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

    最近软矿频繁地介绍了各种VPN,有免费的PacketiX.NET和Hotspot Shield,有付费的Astrill VPN,iVPN和PureVPN.在介绍这些VPN的时候,常常会说到PPTP.L ...

  2. mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用

    mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句. 慢查询配置和使用 在msyql ...

  3. lua学习:游戏中的Lua

    lua作为一种脚本语言,可以快速地开发游戏的原型.提高游戏的开发效率. 在游戏中,lua可以用来完成下面这些工作: ●编辑游戏的用户界面 ●定义.存储和管理基础游戏数据 ●管理实时游戏事件 ●创建和维 ...

  4. CodeForces 702B Powers of Two (暴力,优化)

    题意:给定 n 个数,问你从有多少下标 i < j,并且 ai + aj 是2的倍数. 析:方法一: 从输入开始暴力,因为 i < j 和 i > j 是一样,所以可以从前面就开始查 ...

  5. 我的Memcache学习笔记

    一.编绎安装Memcached 二.Memcached基本命令 四.PHP扩展模块安装 五.设置session用memcache来存储 六.PHP使用Memcache的一致性哈希连接方式 七.Memc ...

  6. Notepad++配置Python运行环境

    转自:http://www.cnblogs.com/zhcncn/p/3969419.html Notepad++配置Python开发环境   1. 安装Python 1 下载 我选择了32位的2.7 ...

  7. AllocateHwnd is not Thread-Safe

    http://www.thedelphigeek.com/2007/06/allocatehwnd-is-not-thread-safe.html http://gp.17slon.com/gp/fi ...

  8. CMSIS Example - osMutex osMutexWait osMutexRelease

    osMutexDef( Mutex ); osMutexId mutex; void Thread0( void * arg); void Thread1( void * arg); osThread ...

  9. Android中string.xml文件中设置部分字体颜色大小

    1.在string.xml文件中: <string name="tips_all"><Data><![CDATA[清理进程:<font colo ...

  10. Codeforces Round #306 (Div. 2) B. Preparing Olympiad dfs

    B. Preparing Olympiad Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/550 ...