簡體   English   中英

值列表中的值存在於彈性字段列表嵌套 c# 中

[英]Value in list of values exists in elastic field list nest c#

無法解決彈性問題。

鑒於:

  1. 顏色列表: var colors_to_filter = ["red", "blue", "black"];
  2. elasticsearch中的字段顏色: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM