我们的索引包含价格字段,我想动态获取给定搜索词组的所有产品的最低/最高价格。可以通过Elasticsearch中的统计信息聚合来实现此功能,但是如何使用Azure搜索方面来实现此功能?
答案 0 :(得分:1)
Azure Search确实支持范围方面。 未包括的是响应中的最小值/最大值。
您可以对此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}
]
"value": [
{
"@search.action": "upload",
"price": 19.99,
"price_copy": 19.99
}]
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方面获取价格的最小/最大值。我认为这种解决方案更好,因为与Liam建议的存储范围解决方案相比,它可以获得更准确的最小/最大值。
有什么想法吗?
答案 2 :(得分:0)
完全同意Joel是正确的答案,但是另一种选择是对价格进行分面并获得所有潜在价格,然后在客户端采用最小和最大。显然,这与Joel的选择不一样,如果您有很多不同的价格,这可能是不现实的。在那种情况下,我认为您可以对价格范围进行分类(例如,计数0至10美元,10-20美元等),以找到最大和最小价格范围,以减少会出现的构面数量回来。