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

在OrchardCore中用Query DSL随机选取ContentType条目遇重复结果问题

解决OrchardCore Query DSL随机选取指定ContentType条目结果重复的问题

你当前的写法无法生成真正的随机结果,原因是对普通字段使用random排序参数并非Elasticsearch(OrchardCore默认搜索引擎)实现随机排序的正确方式,因此每次返回的结果都相同。

正确的Query DSL实现方案

使用function_score结合random_score生成随机排序的结果,示例代码如下:

{
  "query": {
    "function_score": {
      "query": {
        "term": { "Content.ContentItem.ContentType": "Product" }
      },
      "functions": [
        {
          "random_score": {}
        }
      ],
      "boost_mode": "replace"
    }
  },
  "size": 3
}

代码说明

  • function_score:用于为匹配的文档计算自定义分数,这里用它生成随机分数
  • random_score:Elasticsearch提供的专门用于生成随机排序分数的函数,每次查询都会生成不同的随机值
  • boost_mode: "replace":用随机分数替换文档原本的相关性分数,确保完全按随机顺序排序
  • size: 3:指定返回3条随机条目

另一种等价写法(直接通过排序实现)

如果你更倾向于在sort中定义逻辑,也可以使用以下写法:

{
  "query": {
    "term": { "Content.ContentItem.ContentType": "Product" }
  },
  "sort": [
    {
      "_score": {
        "order": "desc",
        "function": {
          "random_score": {}
        }
      }
    }
  ],
  "size": 3
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:05:03