排名期间的字段读数不正确

Incorrect field reading during ranking

Solr 版本 5.1.0

文档包含 DocValues 字段 "ts",在排名期间使用时间戳。

<field name="ts" type="long" docValues="true" indexed="true" stored="true" multiValued="false"/>

如果我直接在 Solr Admin 请求文档 UI 我看到它包含正确的值:

"ts": 1575624481951

但是当我将日志添加到排名方法中时,我看到同一文档的 "ts" 值为 0。

LeafReader reader = context.reader();
NumericDocValues timeDV = DocValues.getNumeric(reader, "ts");
long timestamp = timeDV.get(doc);
LOG.info("ts: " + timestamp);

日志:

ts: 0

问题出在不正确地从 Solr 中删除文档。 那是用下一个动作序列重现的:

  1. 首先将文档添加到没有字段的 Solr "ts"。
  2. 再次添加应用文档中的某些操作后,字段 "ts"。
  3. 当 Solr 尝试对该文档进行排名时,没有该字段。

我添加了额外的日志,发现文档的第一个版本在一个分片上,第二个版本(带有字段 "ts")在另一个分片上。 我不太确定为什么会发生这种情况,因为据我所知,Solr 应该将相同的文档放在同一个分片上。 但无论如何,在添加第二个版本之前从索引中删除文档是固定的。