You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个Elasticsearch7索引查询结果排序不一致问题咨询

问题描述

我有两个Elasticsearch7索引,存储的文档内容完全一致,仅文档的_id不同。执行如下查询语句:

{"query": {"bool": 
{"must": [{"bool": {"must": [{"match": {"distretto": "MI"}}], 
"should": []}}], "should": []}}, 
"_source": ["annosentenza", "cf_giudice", 
"codiceoggetto", "controparte", "id", "nomegiudice", "parte", "text"]}

仅查询distretto为MI的内容时:

  • civile索引首页结果:
    • eDmNh38BgYGzAMbAifcN -> MI 111002 CIGOLINI CHIARA
    • 2jmNh38BgYGzAMbAlfcv -> MI 230999 INPS
  • paganotti_civile索引首页结果:
    • 98WLpIQBAcCrPawmBF_o -> MI 140112 SODALITAS SOC. COOP. SOCIALE ONLUS
    • -MWLpIQBAcCrPawmBV8M -> MI 140022 AM CASALI S.R.L.

我期望paganotti_civile索引返回与civile索引相同的首页结果。以下是两个索引的查询响应详情:

第一个索引(civile)查询响应

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : 2.7262077,
    "hits" : [
      {
        "_index" : "civile",
        "_type" : "_doc",
        "_id" : "eDmNh38BgYGzAMbAifcN",
        "_score" : 2.7262077,
        "_source" : {
          "codiceoggetto" : "111002",
          "controparte" : "CIGOLINI CHIARA",
          "nomegiudice" : "BONIOLO FLAVIANA",
          "annosentenza" : "",
          "cf_giudice" : "BNLFVN76A56F205I",
          "parte" : "ARCAINI GIUSEPPE",
          "id" : "GLMI 87088946 123646"
        }
      },
      {
        "_index" : "civile",
        "_type" : "_doc",
        "_id" : "2jmNh38BgYGzAMbAlfcv",
        "_score" : 2.7262077,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "230999",
          "controparte" : "INPS",
          "nomegiudice" : "FEDELE EMANUELA",
          "annosentenza" : "",
          "cf_giudice" : "FDLMNL64D52B300E",
          "parte" : "CIFALDI NICOLA",
          "id" : "GLMI 99957367 27427"
        }
      },
      {
        "_index" : "civile",
        "_type" : "_doc",
        "_id" : "ATmNh38BgYGzAMbAmfhY",
        "_score" : 2.7262077,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "220050",
          "controparte" : "ROMEO GESTIONI SPA",
          "nomegiudice" : "FEDELE EMANUELA",
          "annosentenza" : "",
          "cf_giudice" : "FDLMNL64D52B300E",
          "parte" : "RISI LORENA",
          "id" : "GLMI 98349767 27599"
        }
      },
      {
        "_index" : "civile",
        "_type" : "_doc",
        "_id" : "LTmNh38BgYGzAMbAnvgM",
        "_score" : 2.7262077,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "144032",
          "controparte" : "BALDINI ILEANA",
          "nomegiudice" : "ROCA GRAZIA CONCETTA",
          "annosentenza" : "",
          "cf_giudice" : "RCOGZC84P50D643J",
          "parte" : "P.C.E. PRODUZIONE CABLAGGI ELETTRICI S.R.L.",
          "id" : "GLMI 75594601 109890"
        }
      },
      {
        "_index" : "civile",
        "_type" : "_doc",
        "_id" : "hzmNh38BgYGzAMbAqPjU",
        "_score" : 2.7262077,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "220040",
          "controparte" : "COMUNE OGGIONA CON SANTO STEFANO",
          "nomegiudice" : "FEDELE EMANUELA",
          "annosentenza" : "",
          "cf_giudice" : "FDLMNL64D52B300E",
          "parte" : "MAGISTRI MARCO EMILIO",
          "id" : "GLMI 100942914 26946"
        }
      }
    ]
  }
}

第二个索引(paganotti_civile)查询响应

{
  "took" : 138,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : 0.4119706,
    "hits" : [
      {
        "_index" : "paganotti_civile",
        "_type" : "_doc",
        "_id" : "98WLpIQBAcCrPawmBF_o",
        "_score" : 0.4119706,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "140112",
          "controparte" : "SODALITAS SOC. COOP. SOCIALE ONLUS",
          "nomegiudice" : "PERTILE ROBERTO",
          "annosentenza" : "",
          "cf_giudice" : "PRTRRT58A14L872W",
          "parte" : "RANZANI GIUSEPPINA",
          "id" : "GLMI 100944044 1964905"
        }
      },
      {
        "_index" : "paganotti_civile",
        "_type" : "_doc",
        "_id" : "-MWLpIQBAcCrPawmBV8M",
        "_score" : 0.4119706,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "140022",
          "controparte" : "AM CASALI S.R.L.",
          "nomegiudice" : "CAPPELLO ADA",
          "annosentenza" : "",
          "cf_giudice" : "CPPDAA87T59C351D",
          "parte" : "BOSSI GIANCARLO",
          "id" : "GLMI 75970798 113201"
        }
      },
      {
        "_index" : "paganotti_civile",
        "_type" : "_doc",
        "_id" : "-cWLpIQBAcCrPawmBV8g",
        "_score" : 0.4119706,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "140051",
          "controparte" : "BUCCI GIORGIO",
          "nomegiudice" : "FERRARI FRANCESCO MATTEO",
          "annosentenza" : "2021",
          "cf_giudice" : "FRRFNC67M20F205B",
          "parte" : "POZZA OTTAVIANO ALVISE",
          "id" : "GLMI 135138291 2299283"
        }
      },
      {
        "_index" : "paganotti_civile",
        "_type" : "_doc",
        "_id" : "-sWLpIQBAcCrPawmBV81",
        "_score" : 0.4119706,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "140041",
          "controparte" : "DI LAURO GENNARO  (AVV.)",
          "nomegiudice" : "RAINERI CARLA ROMANA",
          "annosentenza" : "2020",
          "cf_giudice" : "RNRCLR55E52G535U",
          "parte" : "MONTE DEI PASCHI DI SIENA SPA",
          "id" : "GLMI 101233632 100541"
        }
      },
      {
        "_index" : "paganotti_civile",
        "_type" : "_doc",
        "_id" : "-8WLpIQBAcCrPawmBV9D",
        "_score" : 0.4119706,
        "_ignored" : [
          "text.keyword"
        ],
        "_source" : {
          "codiceoggetto" : "140022",
          "controparte" : "CO.GE.T. SOCIETA  COOPERATIVA IN LIQUIDAZIONE",
          "nomegiudice" : "MANTOVANI ANNA",
          "annosentenza" : "2021",
          "cf_giudice" : "MNTNNA58A68F205S",
          "parte" : "AMIACQUE SRL",
          "id" : "GLMI 131465321 114225"
        }
      }
    ]
  }
}

请问为何两个索引返回结果排序不同,如何让paganotti_civile索引返回与civile索引相同的首页结果?


问题分析与解决方案

排序差异原因

  1. 评分计算不一致:从响应数据可见,civile索引内所有匹配文档的评分均为2.7262077,而paganotti_civile的匹配文档评分都是0.4119706。这说明两个索引的字段映射或分词器设置存在差异,比如distretto字段在civile中是keyword类型(精确匹配,评分更高),在paganotti_civile中是text类型(分词匹配,评分更低),导致相同查询下的匹配度计算结果不同。
  2. 默认排序逻辑影响:当多个文档评分相同时,Elasticsearch会默认以文档_id作为排序依据。由于两个索引的_id完全不同,即使评分一致,最终返回的排序也会出现差异。

解决方案

要让paganotti_civile返回与civile一致的首页结果,可从以下两个方向处理:

1. 统一索引映射与分词设置

检查civile索引的字段映射(尤其是distretto字段),将paganotti_civile的映射调整为完全一致的配置。调整完成后需要重新索引数据,确保两个索引对字段的处理逻辑相同,这样查询时的评分计算结果才能统一。

2. 指定明确的排序规则

如果无法修改索引配置,可直接在查询中指定统一的排序字段,替代默认的「评分+_id」排序逻辑。选择两个索引中对应文档值完全一致的字段(比如响应中的id字段)进行排序:

修改后的查询语句示例:

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "must": [{"match": {"distretto": "MI"}}],
            "should": []
          }
        }
      ],
      "should": []
    }
  },
  "_source": ["annosentenza", "cf_giudice", "codiceoggetto", "controparte", "id", "nomegiudice", "parte", "text"],
  "sort": [
    {"id": "asc"}
  ]
}

这样无论评分和_id如何,都会按照id字段的顺序返回结果,确保两个索引的首页结果一致。如果id字段不适合排序,也可以选择其他内容一致的字段(如codiceoggetto)或多字段组合排序,只要保证对应文档的字段值完全相同即可。


内容的提问来源于stack exchange,提问作者zabitstack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:35:36