【问题标题】:lucene documents order change after number of commitslucene 记录提交次数后的顺序更改
【发布时间】:2018-05-25 07:21:20
【问题描述】:

我在从索引中搜索 lucene 文档时遇到了问题。我需要按照从最后一个索引到第一个索引文档的顺序快速获取文档。我可以看到订单一直保持到对索引的九次提交。但是顺序从病房的第 10 次提交开始改变。请注意,所有文档 ID 编号都已更改并且未维护插入顺序,旧文档编号都重新编号为不同的编号。

即使在多次提交索引后也能保持插入顺序的任何解决方案。

直到九次提交,文件结构看起来像 - 没有发现顺序问题:

第十次提交后,结构发生变化,文档顺序也发生变化

【问题讨论】:

  • 所以您按 docid 对查询结果进行排序?
  • 其实我们在查询的时候不使用排序。我认为它保持了插入的顺序。
  • 不,它没有,我会在我的答案中添加一个例子

标签: sorting indexing lucene


【解决方案1】:

切勿使用 docId 作为订购参考。这是一个 lucene 内部 id,可能会根据 lucene 的索引操作而改变。

例如:如果您使用 docId 1 更新文档,lucene 会在内部执行删除和插入操作。这可能会导致另一个 docId。

要通过查询输入实现排序/排序,您应该在索引中添加一个专用字段。见Field Javadoc。为此目的有几个字段:

  • SortedDocValuesField: byte[] 按列索引用于排序/分面
  • SortedSetDocValuesField:SortedSet 按列索引 排序/分面
  • NumericDocValuesField:长索引列,用于排序/分面
  • SortedNumericDocValuesField:SortedSet 按列索引 排序/分面

重要提示:此字段仅用于评分/排序/分面。如果你想在查询结果中也有这个值,你必须为这个值添加一个额外的 StoredField。

【讨论】:

  • 非常感谢您的评论。说得通。我会检查并让您知道任何澄清。
  • 尝试使用单独的独立代码并且它有效。这要合并到我们的主应用程序中需要其他更改和依赖项。所以检查这些变化。非常感谢您的支持和指导。
  • 好的。您能否标记为已回答或仅为其他有相同问题的人添加其他答案;)
猜你喜欢
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 2020-02-03
  • 1970-01-01
相关资源
最近更新 更多