当前位置: 首页 > 面试题库 >

Elasticsearch按动态价格排序

郑富
2023-03-14
问题内容

这是场景:

想象一下,注册用户使用创建了一个新实体,price: 1 | currency: EUR而其他注册用户创建了一个新实体,price: 1 | currency: USD依此类推…

我想要做的是根据记录价格对记录进行排序,具体取决于前端用户选择的货币(欧元或美元)。

我无法编制索引,例如price_eurprice_usd,因为费率每小时都会变化,但是如果可能的话,更新10000条记录价格的最佳方法是什么?

1-以下是我的建议,它可行,但是我认为这可能是更好的方法,有什么建议吗?

2-如果没有,哪种性能更好?

3-ES有一些魔力可以发挥和使用,例如price_in_eur

功能评分

{
    "query": {
        "function_score": {
            "functions": [
                {
                    "script_score": {
                        // 1 EUR = 0.74452 USD
                        "script": "('EUR' == _source.currency ? doc['boat.price'].value : doc['boat.price'].value * 0.744520)"
                     }
                }
            ],
            "query": {
                "filtered": {
                    "query": { "match_all":{} }
                }
            }
        } 
    },
    "sort": { "_score": { "order": "desc" }}
}

排序脚本

{
    "fields": ["_source"],
    "query": { "match_all": {} },  
    "sort": {
        "_script": {
            // 1 EUR = 0.74452 USD
            "script": "('EUR' == _source.currency ? doc['boat.price'].value : doc['boat.price'].value * 0.744520)",
            "type" : "number",
            "order": "asc"

        }
    }
}

谢谢你的时间。


问题答案:

ES没有直接方法可以自动为您进行价格转换。您所做的方式是完成任务的正确方法。您应该进行功能评分查询,因为与基于单个脚本的排序相比,它会更好。如文档所述:

请注意,对于基于单个自定义脚本的排序,建议使用function_score查询代替,因为基于分数的排序更快。

使用功能分数查询会更好,因为对分数值进行排序会更快。

谢谢



 类似资料:
  • 我的elasticsearch索引中有几千个文档。文档有几个嵌套集合。其中之一是“变体”的嵌套集合。JSON结构文档之一是: 我的商店在一页上只显示了48种产品。我的索引总共有4800种产品,所以在我的商店里有100页。 我对按价格排序有一个问题。 我编写了一些elasticsearch查询(用于第一页): 我有第一个48个产品与他们的变体,但这种排序工作不是在我的索引中的所有产品变体。这种排序的

  • 动态gas价格与限价 在使用智能合约时,你可能需要根据调用函数指定不同的gas价格和最大值。你可以通过为智能合约封装包创建自己的ContractGasProvider来实现这一点。 每一个生成的封装包都包含作为常量的所有智能合约方法名称,这有助于通过switch来进行编译时间匹配。 例如,使用Greeter合约: Greeter greeter = new Greeter(...); greete

  • 问题内容: 我有ElasticSearch 5,我想根据字段值进行排序。想象一下,具有类别(例如流派)的文档可能具有科幻,戏剧,喜剧等值,并且在进行搜索时,我想对值进行排序,以便首先出现喜剧,然后是科幻和戏剧。然后,我当然会按照其他条件在小组内订购。有人可以指出我该怎么做吗? 问题答案: 使用手动排序进行Elasticsearch排序 在可以根据字段的特定值分配顺序的情况下,这是可能的。 我已经使

  • WooCommerce Dynamic Pricing插件可以实现动态价格,比如一个产品买1-10个单价10元,买11-20个单价9元。这个插件缺少一个功能——在产品页面展示动态价格表,本文介绍添加WooCommerce Dynamic Pricing动态价格表的方法。 WooCommerce Dynamic Pricing动态价格表 该插件默认不能在产品页面显示价格表,要将产品加入购物车,再去购

  • 两个实体:收集和产品。集合是Product的父级。 我需要通过产品的条款搜索,并显示每4个产品的集合。 藏品和产品可以部分匹配,但先要最好的匹配。如果匹配未满,则某些项具有优先权。 示例:搜索“color:red”和“Material:stone”需要首先显示红色石头,然后显示任何其他红色(这是关于收藏匹配和产品匹配)。 因此,所有这些都通过以下请求得到解决: 好了,现在麻烦来了。 需要按价格排序

  • 我在Woocommerce下运行我的演示商店,我想将当您选择产品变体时显示的价格移动到数量字段的正下方,而不是介于数量字段和上一个变体之间。 这是我在文件到目前为止,但它不起作用: 我在什么地方出错了吗?