C# NEST如何对StudentDocument的favourbooks子列表添加条件过滤
你需要在原有的过滤列表中新增针对嵌套数组favourbooks的查询条件即可,根据你Elasticsearch中favourbooks字段的映射类型,对应两种实现方式:
情况1:favourbooks为推荐的nested类型(数组对象标准映射)
新增如下过滤规则到filters列表:
filters.Add(fq => fq .Nested(n => n // 指定嵌套数组的路径 .Path(p => p.favourbooks) .Query(q => q .Term(t => t // 强类型指定嵌套字段路径,First()仅为表达式语法,不会实际执行集合操作 .Field(f => f.favourbooks.First().bookname) .Value("Three Little Pig") ) ) ) );
情况2:favourbooks为默认的object类型
直接添加普通Term查询即可:
filters.Add(fq => fq .Term(t => t .Field(f => f.favourbooks.First().bookname) .Value("Three Little Pig") ) );
注意事项
Term查询为精确匹配,要求bookname字段为keyword类型才能正确匹配完整书名,如果bookname是text分词类型,可以将Term替换为Match查询实现分词匹配。- 新增后原有查询逻辑不需要修改,
Bool.Filter会自动组合所有过滤条件取交集。
内容的提问来源于stack exchange,提问作者Suki Yua
相关产品推荐
相关产品推荐

