为什么solr在更新字段后更改记录位置

yqlxgs2m  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(373)

我是solr的新手,在更新字段和执行搜索时遇到了一个奇怪的行为。
下面是一个场景:我的核心中有300条记录,我有一个搜索查询,在其中我用这个过滤结果 fq=IsSoldHidden:false AND IsDeleted:false AND StoreId:60 我把它分类 DateInStock asc 一切都完美地返回了我的预期结果,以下是我查询的前3个结果示例:

--------------------------------------------------------------------------------------
id    | Price   | IsSoldHidden | IsDeleted | StoreId | StockNo | DateInStock 
-------------------------------------------------------------------------------------- 
27236 | 15000.0 |   false      |  false    |    60   |  A00059 | 2021-06-07T00:00:00Z
-------------------------------------------------------------------------------------- 
37580 | 0.0     |   false      |  false    |    60   |  M9202  | 2021-06-08T00:00:00Z
-------------------------------------------------------------------------------------- 
37581 | 12000   |   false      |  false    |    60   |  M9173  | 2021-06-08T00:00:00Z

但当我试图更新(具体来说是原子更新)时 Price 字段,并使用相同的筛选器要求再次触发搜索,结果更改为:

--------------------------------------------------------------------------------------
id    | Price   | IsSoldHidden | IsDeleted | StoreId | StockNo | DateInStock
-------------------------------------------------------------------------------------- 
27236 | 15000.0 |   false      |  false    |    60   |  A00059 | 2021-06-07T00:00:00Z
-------------------------------------------------------------------------------------- 
37581 | 0.0     |   false      |  false    |    60   |  M9173  | 2021-06-08T00:00:00
-------------------------------------------------------------------------------------- 
37582 | 0.0     |   false      |  false    |    60   |  M1236  | 2021-06-08T00:00:00Z

第一个结果的第二行(37580)放在最后一行(文件#300)。
我在网上进行了研究,以下是我的发现
当文档的随机场值改变时,solr会改变文档的分数
但我认为情况与我不同,因为我没有把分数作为一种排序。
我不知道为什么会这样,我是不是错过了什么?还是有人可以解释?
提前谢谢。

t9aqgxwy

t9aqgxwy1#

由于日期相同,它们的内部排序顺序取决于它们在索引中的位置。
更新文档会将原始文档标记为已删除,并在索引末尾添加新文档,因此其在索引中的位置会更改。
如果你想让它稳定,按 dateid 相反,这样会降低成本 id 当日期相同时,将始终是第一个,并且排序将是稳定的。

相关问题