【发布时间】:2025-12-03 21:15:02
【问题描述】:
我是 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
第一个结果的第二行(37580)被放在最后一行(document#300)。
我在网上研究过,这是我发现的
Solr changes document's score when its random field value altered
但我认为情况与我的不同,因为我没有将分数添加为排序。
我不知道为什么会这样, 我错过了什么吗? 或者有没有人可以解释一下?
提前致谢。
【问题讨论】:
-
由于您没有在返回的条目中包含实际日期,因此很难说 - 但日期是否相同?在这种情况下,将使用 Lucene 中的内部文档顺序,并且由于更新实际上是删除 + 插入,因此新文档将附加到索引的末尾。也很难说
37580是否包含在您示例的结果中。 -
@MatsLindh,嗨,我更新了我的帖子并包含了日期。而且我还在使用原子更新来更新价格字段。