无法解决弹性问题。
给出:
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。但是要求似乎很明确:
第一个过滤器包含的元素颜色在colors_to_filter
中。然后,再次按colors
中的[
我是
猜测
elastisearch应该自动进行优化,这是向您显示该示例的示例?两个相似的过滤器的确切顺序或什至是准备联接的性能?我认为这是唯一对任何搜索/过滤都“具有弹性”的事情。.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
.Terms(tr =>
{
var tt = tr.Field(fs => fs.Sizes.Suffix("keyword"));
if (sizesList != "null")
return tr.Field(fs => fs.Sizes.Suffix("keyword")).Terms(selectedSizes);
return tt;
})
&& 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;
})));