【问题标题】:Elasticsearch 5 : sort by price of the closest wholesalerElasticsearch 5:按最近批发商的价格排序
【发布时间】:2019-06-04 20:15:42
【问题描述】:

我有一个产品嵌套文档,其中包含与不同批发商相关的价格列表。 这是一个文档示例:

{
    "sku": "065879",
    "name": "My product",
    "price": [
        {
            "wholesaler": "1",
            "location": "drm3btev3",
            "price": "12.34"
        },
        {
            "wholesaler": "2",
            "location": "gbsuv7ztq",
            "price": "45.67"
        },
    ]
}

给定客户的地理位置,获取按价格排序的文档列表的正确查询是什么,仅使用每个文档的最接近价格?

提前致谢!

【问题讨论】:

    标签: sorting elasticsearch nested elasticsearch-5 geopoints


    【解决方案1】:

    这不是一个真正的答案,但全局方法是使用nested sort。嵌套排序将允许您过滤要对其应用排序的嵌套文档。

    然后您应该在嵌套排序过滤器中添加一个脚本查询,以确定最近的批发商。问题是你不能无痛地使用 geohash。但是如果您将 geohash 转换为 geopoint 数据类型,您将能够使用脚本距离功能(例如 here

    然后您可以通过迭代所有嵌套文档来计算最小距离,并且只匹配具有最小距离的那个。

    但我不知道性能影响和详细实施。

    祝你好运!

    【讨论】:

    • 哈希是为了编辑方便。对位置字段没有限制。我会看看嵌套排序和嵌套过滤器,但不确定它是否符合我的需要。在上网时,我发现了一些关于“功能分数查询”的东西。你怎么看?
    • 功能分数查询将不允许按最近批发商的价格排序。但它可以让您对价格和距离之间的组合进行排序,请参见此处elastic.co/guide/en/elasticsearch/guide/current/…
    • 感谢您提供此链接。我认为功能分数查询不是我需要的;我不需要可配置的衰减。这要么是用于排序的好价格,要么不是。我将使用嵌套排序 + 嵌套过滤器。
    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多