用 flex 无法解决问题。
鉴于:
var colors_to_filter = ["red", "blue", "black"];
colors: ["green", "red", "black"]
任务:
从Elasticsearch中获取所有产品的颜色,这些颜色已在
colors_to_filter
列表中定义。如果elasticsearch
colors_to_filter
字段中存在colors
中的任何颜色,请退回该产品。我当前的代码不起作用:
(看一下这一行):
.Bool(bl => bl.Filter(fl => fl.Terms( tr => tr.Field(fs => fs.Sizes.Suffix("keyword")).Terms(sizesList))
.Aggregations(a => a.Terms(sizesAggName, tt => tt.Field(o => o.Sizes.Suffix("keyword")))
.Max(priceAggNameMax, st => st.Field(o => o.SalePrice)))
.TrackTotalHits()
.Sort(p => GetSortType(sortType))
.Index(GetIndexName())
.From(from)
.Size(size)
.Query(q => q.Bool(b => GetQuery(mainCategory, subCategory, subSubcategory, term)))
.PostFilter( ppf => ppf
.Bool(bl => bl.Filter(fl => fl.Terms( tr => tr.Field(fs => fs.Sizes.Suffix("keyword")).Terms(sizesList))
&& ppf.Range(r => {
r = r.Field(f => f.SalePrice);
if (minPrice > 0) r = r.GreaterThanOrEquals((double)minPrice);
if (maxPrice > 0) r = r.LessThanOrEquals((double)maxPrice);
return r;
})))));
最佳答案
我不知道Elasticsearch。但是要求似乎很明确:
第一个过滤器的元素Color在colors_to_filter
中。然后再次用colors
过滤颜色的结果。最终的结果是只有在两个过滤条件下都可以幸存的事物。
一种优化方法是将这两个列表都缩减为一个都具有两种颜色的列表(将分别为“红色”和“黑色”)。然后使用该amalgm数组作为过滤器。我不确定再次加入这种方式。
我猜elastisearch应该自动进行优化,这是一个向您展示的示例?两个相似的过滤器的确切顺序或什至是准备联接的性能?我认为这是唯一对任何搜索/过滤都具有“ flex ”的事情。
关于c# - 值列表中的值存在于弹性字段列表嵌套C#中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60126583/