我知道当我想使用以下代码仅搜索一个值时,可以执行嵌套路径搜索:
.Query(q => q
.Nested(n => n
.Path(p => p.memberships)
.Query(q2 => q2
.Bool(b => b
.Should(s2 => s2
.Match(m => m.Field("memberships.Id").Query("20334089"))))))))
那很好。我正在尝试基于字符串列表作为字段值进行查询。我根据先前的答案使用了TermAny函数,并认为它可能已用于嵌套路径查询:
https://stackoverflow.com/a/36377068/1451776
private static QueryContainer TermAny<T>(QueryContainerDescriptor<T> descriptor, Field field, object[] values) where T : class
{
QueryContainer q = new QueryContainer();
foreach (var value in values)
{
q |= descriptor.Term(t => t.Field(field).Value(value));
}
return q;
}
比方说,我在字符串数组myIDSArry中有一个Ids列表,我想用它在一个嵌套路径字段中搜索,该字段在elasticsearch中称为Membership。我已经尝试过了
.Query(q => q
.Nested(n => n
.Path(p => p.memberships)
.Query(q2 => q2
.Bool(b => b
.Should(s => TermAny(s, "memberships.Id", myIDSArry)))))))
但是,它返回0命中,我知道结果中应该有一些。关于如何根据字符串列表进行搜索的任何想法?
答案 0 :(得分:0)
实际上,我找到了答案,并在其他人有相同问题的情况下将其发布。基于我在Elasticsearch查询中所了解的内容,它非常简单,有时会使用我知道的“关键字”一词。我通过添加.keyword
来修复它.Query(q => q
.Nested(n => n
.Path(p => p.memberships)
.Query(q2 => q2
.Bool(b => b
.Should(s => TermAny(s, "memberships.Id.keyword", myIDSArry)))))))