【发布时间】:2018-02-02 14:59:53
【问题描述】:
我现在成功地让我的 c# Test win 表单应用程序与聚合一起使用,现在我希望能够在有人选择其中一个(或多个)聚合时过滤所述聚合。
这是我的查询,它完全按照我的意愿工作,我得到了价格范围桶和它可以在索引中找到的每个规范术语的桶。
.Aggregations(a => a
.Nested("specifications", n => n
.Path(p => p.ProductSpecification)
.Aggregations(aa => aa.Terms("groups", sp => sp.Field(p => p.ProductSpecification.Suffix("name"))
.Aggregations(aaa => aaa
.Terms("attribute", tt => tt.Field(ff => ff.ProductSpecification.Suffix("value"))))
)
)
)
.Range("price_range", ra => ra
.Field(p => p.Price)
.Ranges(
r => r.To(50),
r => r.From(50).To(100),
r => r.From(100).To(150),
r => r.From(150).To(200),
r => r.From(200).To(250),
r => r.From(250)
)
))
.Index("myindex")
.Type("product")
.Query(q => q
.MultiMatch(m => m
.Query(searchBox.Text + "*")
.Fields(ff => ff
.Field(f => f.Name, boost: nameBoost)
.Field(f => f.Description, boost: descriptionBoost)
.Field(f => f.ProductCode)))));
有人可以指出我如何根据选择这些桶中的任何一个来过滤结果。
更新 (30/01/18) 我现在已将此添加到我的查询中
&& q.Nested(n => n
.Path(p => p.ProductSpecification)
.Query(q2 => q2
.Terms(t => t
.Field(f => f.ProductSpecification.Suffix("name"))
.Terms("Guarantee",)
)).Query(q3 => q3
.Terms(t2 => t2
.Field(f2 => f2.ProductSpecification.Suffix("value"))
.Terms("3 years","10 years")
)))
));
这使我能够将多个值传递给一个规格过滤器,但我不确定如何实现的是如何过滤多个规格,因此上述 Guarantee 上的过滤器具有 3 年或 10 年的值 但如果我还想将“灰色”和“铜”的值传递给“颜色”的规范
在我的第一组术语中添加“颜色”,在第二个术语列表中添加“灰色”和“铜”会破坏所有过滤。 我想我在这里只是需要一点方向
【问题讨论】:
-
我已经更新了问题以包括我在过滤查询方面的进展,如果有人可以给我任何指示以继续前进的话。那太好了
-
我找到了解决方法,我会尽快更新完整的解决方案
标签: c# elasticsearch nest