(新手问题) 我继承了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>
答案 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 是一个内部字段,在进行原子更新时会自动更新。您无需手动更新。
尼科