【发布时间】: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 人员在生产系统上是否有不同版本的文件(我只是一个“开发人员”,所以我自己无权访问实际的服务器!)