c# - 值列表中的值存在于弹性字段列表嵌套C#中

标签 c# elasticsearch nest

用 flex 无法解决问题。

鉴于:

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

    相关文章:

    c# - 在 C# json 对象序列化和数据契约中包装原始类型

    elasticsearch - 使用 elasticsearch 按受欢迎程度进行实时评分的替代方案

    c# - 使用Nest Client进行Elastic Search中的动态构面

    java - Elasticsearch排序字段包含特殊字符数字和字母

    c# - ElasticSearch .net GeoDistance过滤器不起作用

    c# - NEST:在条件下添加术语查询

    C# Mysql cultureinfo.invariantculture

    c# - 在 .NET Core 中使用反射

    c# - 使用 LINQ Average() 方法处理空结果

    configuration - 我的 elasticsearch 实例已启动并正在运行,让我们将其投入生产。