【问题标题】:SOLR Index can't find updated recordsSOLR 索引找不到更新的记录
【发布时间】:2014-08-04 07:30:17
【问题描述】:

(新手问题) 我继承了 SOLR4 安装,我正在学习。

我需要通过设置/添加字段的值(字段名称="optout")来更新一些文档。我正在使用 SOLR4 中提供的 Atomic 文档更新。但是,我做错了什么。我的文档正在更新,但某些字段现在有多个值。 (有些文档已经有了“optout”的值)。

但我真正担心的是,我无法再通过搜索找到这些记录。他们似乎已经退出了索引。

这是从搜索返回的典型文档:

<doc><str name="id">myColl-myId</str>
    <str name="recordSystem_rid">622103814</str>
    <long name="_version_">1464135593682272256</long>
    <bool name="optout">false</bool>
</doc>

有些文档没有设置 optout 标志。

我的更新网址如下所示:

http://prodsolr01.cco:8983/solr/records/update?stream.body=<add><doc><field name="id">myColl-myId</field><field name="recordSystem_rid">622103814</field><field name="_version_">1462876089586024448</field><field name="optout" update="add">true</field></doc></add>&commit=true

更新后我无法使用之前获取记录的查询找到该记录。

修改后的文档需要重新索引吗?

如果我按 id 搜索,我可以找到记录,但它已经被修改,现在看起来像这样:

<doc>
<str name="id">myColl-myId</str>
<arr name="recordSystem_rid">
    <long>622103814</long>
    <long>622103814</long>
</arr>
<long name="_version_">1470576227169337344</long>
<bool name="optout">true</bool>
</doc>

请注意,有两个“recordSystem_rid”值。

为什么这个字段有两个值?

对此的任何见解都会有所帮助。

更新:从 schema.xml 添加摘录 基于此处可用的架构:http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/solr/collection1/conf/schema.xml?view=markup

<schema name="example" version="1.5">
    <fields>
        <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="recordsystem_rid" type="long" index="true" stored="true" multiValued="false" omitNorms="true" />
        <field name="_version_" type="long" index="true" stored="true" />
        ... dynamicFields are defined next....
    </fields>
    <uniqueKey>id</uniqueId>
    <solrQueryParser defaultOperator="AND" />
    ... copy fields are defined.....
    ... typed are defined ....
</schema>

【问题讨论】:

  • 你能分享你的架构定义吗?
  • 基于起始模式:
  • 那里有很多不同的示例模式,为了调试这需要查看当前系统上存在的模式。如果您可以编辑您的问题并添加架构或添加指向要点的链接。
  • 对不起。 friggin SO 编辑遗漏了我在后续操作中复制/粘贴的模式。编辑我原来的问题。
  • 从 schema.xml 文件中剪切/粘贴摘录后,我注意到“recordsystem_rid”字段是用“multiValued=false”定义的,但似乎有多个值存储在一个数组中。我想知道 IT 人员在生产系统上是否有不同版本的文件(我只是一个“开发人员”,所以我自己无权访问实际的服务器!)

标签: xml solr updates solr4


【解决方案1】:

我认为问题在于您的更新网址。使用 Solr Atomic 更新,如果您想更改您应该使用“set”的现有字段。我不清楚当您不指定操作时会发生什么。当该行为未记录时,我个人会避免将其保留为 Solr 中的默认行为。

所以从你原来的更新网址:

http://prodsolr01.cco:8983/solr/records/update?stream.body=<add><doc><field name="id">myColl-myId</field><field name="recordSystem_rid">622103814</field><field name="_version_">1462876089586024448</field><field name="optout" update="add">true</field></doc></add>&commit=true

我会改成这样:

http://prodsolr01.cco:8983/solr/records/update?stream.body=<add><doc><field name="id">myColl-myId</field><field name="recordSystem_rid" update="set">622103814</field><field name="_version_">1462876089586024448</field><field name="optout" update="add">true</field></doc></add>&commit=true 

注意将update="set" 添加到recordSystem_rid 字段更新。

在使用_version_ 混合原子更新方法和乐观并发更新方法时,我也会小心。绝对支持,但我想仔细测试一下。

【讨论】:

  • 跟进新手问题:我是否应该在更新中省略 version 字段(现在转到谷歌)。不确定我是否理解该字段。
【解决方案2】:

version 是一个内部字段,在进行原子更新时会自动更新。您无需手动更新。

尼哥

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多