固定评分查询(ConstScoreQuery)将子查询包装为过滤条件,所有命中的文档统一返回固定的相关性分数(1.0),不再根据 BM25 等算法计算相关性评分。
接口
固定评分查询的接口为 Search 或 ParallelScan,Query 类型为 ConstScoreQuery。
参数
参数 | 说明 |
filter | 内部子查询条件,支持任意一种 Query 类型(如 MatchQuery、TermQuery、BoolQuery 等)。ConstScoreQuery 仅判断文档是否命中该子查询,命中即返回固定分数 1.0,不参与 BM25 相关性评分计算。 |
getTotalCount | 是否返回匹配的总行数,默认为 false,表示不返回。返回匹配的总行数会影响查询性能。 |
tableName | 数据表名称。 |
indexName | 多元索引名称。 |
columnsToGet | 是否返回所有列,包含 returnAll 和 columns 设置。returnAll 默认为 false,表示不返回所有列;当设置 returnAll 为 true 时,表示返回所有列。在 returnAll 为 false 时,可以通过 columns 指定返回的列,未指定时只返回主键列。 |
适用场景
业务只关心文档是否命中而不关心相关度排序时,使用 ConstScoreQuery 可消除因文本长度、词频等因素导致的评分差异,将排序权交给后续自定义排序逻辑(如 FieldSort、PrimaryKeySort)。
在 BoolQuery 的 mustQueries 中对部分子句使用 ConstScoreQuery 包装,可消除这些子句的评分贡献,仅保留其他子句的相关性分数作为最终排序依据。
查询条件仅用于过滤而非排序时,使用 ConstScoreQuery 可减少不必要的评分计算开销。
与 BoolQuery filterQueries 的区别
对比项 | BoolQuery filterQueries | ConstScoreQuery |
评分贡献 | 不贡献任何分数 | 贡献固定分数 1.0 |
使用位置 | 只能作为 BoolQuery 的 filterQueries 子句 | 可独立使用,也可放在 BoolQuery 的 mustQueries 或 shouldQueries 中 |
典型用途 | 纯过滤,不影响排序 | 需要占位评分(如与其他带评分 query 组合时统一基准分) |
使用方式
Tablestore 多元索引同时提供 Java SDK 和 Go SDK 实现固定评分查询。