为什么 Solr 在更新字段后更改记录位置
Why does Solr changes record position after updating a field
我是 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
但是当我尝试更新(AtomicUpdate 具体) 第二行的 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
第一个结果的第 2 行(37580) 放在最后一行(document#300)。
我在网上进行了调查,这是我找到的
Solr changes document's score when its random field value altered
但我认为情况与我不同,因为我没有将分数添加为排序。
我不确定为什么会这样,
我错过了什么吗?
或者有没有人可以解释一下?
提前致谢。
由于日期相同,它们的内部排序顺序取决于它们在索引中的位置。
更新文档会将原始文档标记为已删除,并在索引末尾添加一个新文档,因此它在索引中的位置会发生变化。
如果你想让它稳定,按 date
和 id
排序 - 这样当日期相同时,较低的 id
总是排在第一位,并且排序会很稳定。
我是 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
但是当我尝试更新(AtomicUpdate 具体) 第二行的 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
第一个结果的第 2 行(37580) 放在最后一行(document#300)。
我在网上进行了调查,这是我找到的
Solr changes document's score when its random field value altered
但我认为情况与我不同,因为我没有将分数添加为排序。
我不确定为什么会这样, 我错过了什么吗? 或者有没有人可以解释一下?
提前致谢。
由于日期相同,它们的内部排序顺序取决于它们在索引中的位置。
更新文档会将原始文档标记为已删除,并在索引末尾添加一个新文档,因此它在索引中的位置会发生变化。
如果你想让它稳定,按 date
和 id
排序 - 这样当日期相同时,较低的 id
总是排在第一位,并且排序会很稳定。