如何在天蓝色搜索中实现min max facet(类似于Elasticsearch中的统计聚合)?

问题描述 投票:0回答:3

我们的索引有价格字段,我想动态获取给定搜索短语的所有产品的最低/最高价格。此功能可以使用Elasticsearch中的统计信息聚合实现,但如何使用Azure搜索方面实现它?

azure-search
3个回答
1
投票

Azure搜索确实支持范围方面。什么不包括响应中的最小/最大值。

你可以投票给这个feedback来推广expose functionality equivalent to Elasticsearch aggregations的功能。


1
投票

我想出了另一个选择作为解决方法。我们的想法是按价值对方面进行排序。

以价格为例:

  1. 在创建索引时为索引中的价格定义两个字段 "fields": [ { "name": "price", "type": "Edm.Double", "facetable": true } { "name": "price_copy", "type": "Edm.Double", "facetable": true} ]
  2. 上传文档时,将相同的值添加到price和price_copy字段
  "value": [  
    {  
      "@search.action": "upload",  
      "price": 19.99,
      "price_copy": 19.99
    }]
  1. 发送构面请求
    facet=price,sort:value,count:1&facet=price_copy,sort:-value,count:1

响应将是这样的:

"@search.facets": {
    "price": [
        {
            "count": 45,
            "value": 0
        }
    ],
    "price_copy": [
        {
            "count": 20,
            "value": 2899.99
        }
    ]
}

然后我们可以分别从price和price_copy facet中获取价格的最小/最大值。我认为这个解决方案更好,因为与Liam建议的铲斗范围解决方案相比,它可以获得更准确的最小/最大值。

任何想法?


0
投票

完全同意Joel作为正确的答案,然而另一种选择是超越价格并获得所有潜在价格,然后在客户端采取最小值和最大值。显然,这不会像乔尔的选择那样高效,如果你有大量不同的价格可能是不现实的。在这种情况下,我认为你可以做出桶的价格范围(例如数$ 0- $ 10,$ 10-20等......)来查找最大和最小桶价格范围,这将减少将来的方面数量背部。

© www.soinside.com 2019 - 2024. All rights reserved.