【问题标题】:Solr Cloud - Querying on unique field returns different resultsSolr Cloud - 查询唯一字段会返回不同的结果
【发布时间】:2025-12-01 11:15:01
【问题描述】:

我遇到了一个问题,即对 Solr 搜索的查询将返回不同的值。但是我正在查询设置为唯一键字段的 id。

所以在 Solr 管理 UI 中,我将运行类似的查询。

相关响应信息如下。

 "response": {
    "numFound": 1,
    "start": 0,
    "maxScore": 7.4537606,
    "docs": [
      {
        "title": [
          "ICARDA forced to move"
        ],
        "moduleid_s": "58",
        "id": "client1.com.58.1673",
        "enddate_dt": "2015-09-25T23:59:00Z",
        "url": "mysite.com/item.aspx?id=1673",
        "startdate_dt": "2015-09-25T00:00:00Z",

现在多次运行该查询最终会导致不同的响应。

 "response": {
    "numFound": 1,
    "start": 0,
    "maxScore": 7.453251,
    "docs": [
      {
        "title": [
          "ICARDA forced to move"
        ],
        "moduleid_s": "58",
        "id": "client1.com.58.1673",
        "enddate_dt": "2015-09-25T23:59:00Z",
        "url": "mysiteNewUrl.com/item.aspx?id=1673",
        "startdate_dt": "2015-09-25T00:00:00Z",

注意网址不同。

检查了调试查询。你可以看到不同的url在GET_FIELDS部分。

为什么/如何获得不同的信息?我正在查询标记为唯一字段的 id。据我了解,不应该超过这些。 这可能是同步问题吗?我正在使用 Solr 管理 UI 查询并选择了一个核心。

有没有办法检查索引中是否只有一个具有该 ID 的文档?

更新:

我运行了一个方面查询,并且唯一返回 2

<lst name="facet_fields">
 <lst name="id">
<int name="client1.com.58.1673">2</int>

与没有问题的人相比。

<lst name="facet_fields">
 <lst name="id">
<int name="client1.com.58.163">1</int>

这是对的吗?这是否解释了我存在重复文档的问题,但如果是这种情况,为什么不返回两个文档而不仅仅是返回不同的数据?

【问题讨论】:

  • 只有在您重新索引或索引具有相同 ID 的其他文档时才会发生这种情况。
  • @YoungHobbit:所以实际上你可以拥有两个具有相同唯一键字段的文档。我的印象是,如果唯一键字段相同,Solr 只会覆盖。
  • 它应该 - 除非你明确告诉它忽略 uniqueKey 约束。我猜这两个索引作业之间的集群布局(或更改的文档路由器)可能发生了变化,导致文档的路由方式不同。
  • @MatsLindh,这就是我的想法。我相信我们最近确实从 4.6 升级到了 Solr 5.3。这可能导致了这个问题。我运行了一些方面查询,请在问题中查看我的更新。

标签: solr solrcloud solr5


【解决方案1】:

这是 SolrCloud 设置还是单一集合设置?如果是云,您很可能会在两个不同的核心中获得一条记录。可能是由于路由器或升级错误。

好消息,您应该可以通过 facet.field=id, facet.mincount=2 找到所有有此问题的记录。然后您可以删除/重新插入它们以保持一致性。

不,你不应该能够以这种状态结束,所以要么是配置错误、升级失败,要么是一些强制命令忽略了独特的要求。

【讨论】:

    最近更新 更多