0

我正在尝试实现一个外部文件字段以更改 Solr 中的排名值。

我已经在模式中定义了一个字段和字段类型,并且在“solrconfig.xml”中的<query>标签下方,创建了外部文件并添加了重新加载侦听器,如参考指南中所述:

服务器启动后,我可以根据先前创建的字段对文档进行排序,但是,当我在服务器启动时更改值并且进行新的搜索查询时,我无法看到更新的排名列表(既不是更新的排名分数)。

我还尝试按照另一篇文章中的建议添加重新加载请求处理程序并尝试强制提交(http://HOST:PORT/solr/update?commit=true),但它说:

DirectUpdateHandler2 No uncommitted changes. Skipping IW.commit.
DirectUpdateHandler2 end_commit_flush

有什么建议么?

4

1 回答 1

0

使用 ExternalFileFields 进行评分实际上不再那么有用了,因为 Solr 和 Lucene现在支持对使用 docValues 的值进行就地更新

然后,您可以直接使用文档中的这些字段进行评分,并且可以更新它们而无需更新整个文档。这样您就不必从外部重新加载任何内容,并且您的缓存可以由 Solr 自动管理。

字段必须通过三个条件才能进行就地更新(也就是说,也可以使用原子更新,但这需要将所有字段设置为已存储):

只有当要更新的字段满足以下三个条件时,才会使用这种方法执行原子更新操作:

  • 是非索引 (indexed="false")、非存储 (stored="false")、单值 (multiValued="false") 数字 docValues (docValues="true") 字段;

  • _version_ 字段也是一个非索引、非存储的单值 docValues 字段;和,

  • 更新字段的复制目标(如果有)也是非索引、非存储的单值数字 docValues 字段。

于 2018-07-26T21:47:36.970 回答