我是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会改变文档的分数
但我认为情况与我不同,因为我没有把分数作为一种排序。
我不知道为什么会这样,我是不是错过了什么?还是有人可以解释?
提前谢谢。
1条答案
按热度按时间t9aqgxwy1#
由于日期相同,它们的内部排序顺序取决于它们在索引中的位置。
更新文档会将原始文档标记为已删除,并在索引末尾添加新文档,因此其在索引中的位置会更改。
如果你想让它稳定,按
date
及id
相反,这样会降低成本id
当日期相同时,将始终是第一个,并且排序将是稳定的。