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. 如果Apache Spark集群中没有分布式系统,则会?

    若当连接到Spark的master之后,若集群中没有分布式文件系统,Spark会在集群中每一台机器上加载数据,所以要确保Spark集群中每个节点上都有完整数据. 通常可以选择把数据放到HDFS.S3或 ...

  2. Dynamic Method Resolution

    [Dynamic Method Resolution] @dynamic directive 用于声明属性的方法dynamic loading,which tells the compiler tha ...

  3. hdu 2899 Strange fuction

    http://acm.hdu.edu.cn/showproblem.php?pid=2899 Strange fuction Time Limit: 2000/1000 MS (Java/Others ...

  4. A - Oulipo

    A - Oulipo Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  5. iOS单例 宏定义

    #define singleton_interface(className) \ + (className *)shared##className; // @implementation #defin ...

  6. Binding的Source从何而来?

    I. Binding to Object 1. Binding data using ObjectDataProvider AC:Let’s say there is a CLR based data ...

  7. CI reids 缓存

    注意:在项目中的application/libraries 中自己定义的类最好不要以cache命名. 连接 Redis 服务器的配置信息必须保存到 application/config/redis.p ...

  8. JDBC概述以及几种驱动程序

    JDBC(Java DataBase Connectivity,数据库连接)是用来执行SQL的Java API.开发人员可以使用这些标准API来连接和操作数据库 JDBC是Java的规范,考虑到规范的 ...

  9. 【HTML】KindEditor编辑器在ASP.NET中使用

    本文大多内容来自KindEditor官网,自己加工理解后做的一个备份. 编辑器使用方法 1. 下载编辑器 下载 KindEditor 最新版本,下载之后打开 examples/index.html 就 ...

  10. 【M31】让函数根据一个以上的对象类型来决定如何虚化

    1.考虑下面的问题,游戏软件中有角色A,B,角色又可以细化为A1,A2,A3:B1,B2,B3,两类角色之间相互攻击.即A1可以攻击B1,B2,B3,B1可以攻击A1,A2,A3.C++的多态,只根据 ...