![](/img/trans.png)
[英]C# Nest, Elastic Search: update and add to a field that is a list
[英]Value in list of values exists in elastic field list nest c#
無法解決彈性問題。
鑒於:
var colors_to_filter = ["red", "blue", "black"];
colors: ["green", "red", "black"]
任務:
從elasticsearch 中獲取所有顏色已在colors_to_filter
列表中定義的產品。 如果colors_to_filter
colors
字段中存在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;
})))));
我不知道彈性搜索。 然而,要求似乎很明確:
第一個過濾器,其中元素 Color 位於colors_to_filter
。 然后再次過濾結果,其中的顏色也在colors
。 只有在兩次過濾中都幸存下來的東西才會出現在最終結果中。
一種優化是將這兩個列表削減為一個,其中所有顏色都包含在其中(即“紅色”和“黑色”)。 然后使用該 amalgm 數組作為過濾器。 我不確定這又是哪種加入。
我猜elasticsearch 應該自動進行優化,這是一個向您展示這一點的示例? 兩個類似過濾器的確切順序或什至是准備連接以提高性能? 這是我唯一能想到的任何搜索/過濾都具有“彈性”的東西。
工作代碼:
.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"));
return sizesList.Lenght() > 0 ? tt.Terms(selectedSizes) : 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;
})));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.