【问题标题】:Showing featured results with Elastic Search使用 Elastic Search 显示特色结果
【发布时间】:2014-12-16 18:38:40
【问题描述】:

我正在使用 Elastica 在 PHP 上使用 Elastic Search。

我正在检索由项目组成的列表。有些项目是由编辑支付和/或选择的。目前,我只是通过自定义字段“分数”对它们进行排序,该字段根据它们的质量对这些项目进行排名。我想要一种在顶部默认显示 5 个随机列表(仅当它们没有搜索或过滤时)的方法,这些列表是由编辑付费和选择的。

所以我目前正在做的是使用custom filter score query 检索这5 个列表,将脚本设置为使用random()。在仅按分数排序的单独查询中,我排除了这 5 个列表。我的问题当然是分页,为此目的使用两个查询并从另一个查询中排除一个查询的结果似乎是一种黑客行为。

我有这样的事情:

{
    "custom_filters_score" : {
        "query" : {
            "match_all" : {}
        },
        "filters" : [
            ...
        ],
        "script" : "random()"
    }
}

所以我的问题是,最简单的方法是什么?我看过功能分数,不知道是不是我要找的。​​p>

【问题讨论】:

    标签: php sorting pagination elasticsearch elastica


    【解决方案1】:

    我不确定如何使用 Elastica 来实现这一点,我从未使用过它。但是在 ElasticSearch 中,您希望使用带有种子值的 random_score 函数,该种子值将与分页保持一致。这样您就可以确保不会在不同页面上多次获得相同的结果。

    【讨论】:

    • 嗯..我找不到确定应用随机性的“级别”的部分。但就我而言,我想将其应用于具有不同过滤器的查询(付费和编辑选择),是否可以使用 random_score?
    • 因此,您使用 custom_filters_score 的查询实际上已替换为 function_score 查询。如果您查看该文档 (elasticsearch.org/guide/en/elasticsearch/reference/0.90/…),您会注意到您有一个 query/filter 组件和一个 functions 组件。所以你可以像往常一样添加你的过滤器,然后random_score是要添加到functions数组中的函数之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多