• 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":10}, "f2"{"add":20}}

     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字段.

  • 相关阅读:
    LeetCode
    LeetCode
    Centos7防火墙快速开放端口配置方法
    SQLServer2008R2无人值守批处理脚本自动化安装
    sql server2014企业版无人值守批处理脚本自动化安装
    什么是Docker?
    安全终端模拟工具Xshell 5使用密钥认证登录配置详细教程
    SVN服务端VisualSVN数据转移说明
    RTX服务端用户数据迁移说明
    win7系统保护配置现错误“文件名、目录名或卷标语法不正确。(0x8007007B)
  • 原文地址:https://www.cnblogs.com/a198720/p/4322291.html
Copyright © 2020-2023  润新知