【问题标题】:instruct elasticsearch to return random results from different types指示elasticsearch返回不同类型的随机结果
【发布时间】:2016-12-09 17:03:13
【问题描述】:

我在 ES 中有一个索引,其中包含 3 种类型 A、B、C。每种类型包含 1000 种产品。当用户进行没有评分的查询时,ES首先返回A的所有结果,然后是B的所有结果,然后是C的所有结果。

我需要的是呈现 3 种类型的混合结果。

我查看了随机评分,但这并不是我所需要的。

有什么想法吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    你真的需要随机性还是一个类型的简单 3 个结果?通过top hits聚合可以实现每种类型的三个结果。首先按 _type 字段进行聚合,然后应用热门匹配聚合:

    {
      "query": {
        "function_score": {
          "query": {
            "match_all": {
            }
          },
          "random_score": {
            "seed": 137677928418000
          }
        }
      },
      "aggs": {
        "all_type": {
          "terms": {
            "field": "_type"
          },
          "aggs": {
            "by_top_hit": {
              "top_hits": {
                "size": 3
              }
            }
          }
        }
      }
    }
    

    编辑:我添加了随机评分,以获得随机结果,我认为为每个 _type 获取特殊数量的文档很困难,一个解决方案可能是从所有 _type 中获得足够的 字段。

    【讨论】:

    • 您好,我需要以混合顺序显示 3 种类型的所有结果。说来自 A 的 X 结果,然后来自 B 的 Y,来自 C 的 Z,来自 B 的 .. 等等......如果我可以随机显示它们也会很好,但由于我没有会话管理,我无法提供一粒种子。
    • 您可以为每个 ES 请求设置不同的种子,只需在每次请求之前为您的开发环境中的种子字段获取一个随机数。
    • 对,这将是一个解决方案,但是分页呢。我需要用户在页面之间看到一致的结果。如果我每次都使用随机种子,那么每个页面每次都会产生不同的结果。另一方面,正如我所说,我没有会话管理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2010-11-23
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多