SOLR索引无法找到更新的记录

时间:2014-06-13 16:59:42

标签: xml solr updates solr4

(新手问题) 我继承了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>

某些文档没有设置自选标记。

我的更新网址如下:

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添加exerpt 基于此处提供的架构: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>

2 个答案:

答案 0 :(得分:1)

我认为问题在于您的更新网址。如果要更改现有字段,请使用Solr Atomic更新&#34;设置&#34;。我不清楚当你没有指定一个动作时会发生什么。我个人认为,当该行为未被记录时,我会避免将其置于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_混合使用Atomic更新方法和Optimistic Concurrency更新方法时,我也要小心。绝对支持,但我想仔细测试它。

答案 1 :(得分:0)

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

尼科