使用nest从Elasticsearch中的字符串列表中查询嵌套路径

问题描述 投票:0回答:1

我知道当我想使用以下代码搜索一个值时,我可以进行嵌套路径搜索:

    .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列表,我想用它来搜索一个名为membershipsearchs的嵌套路径字段。我试过这个

    .Query(q => q
        .Nested(n => n
            .Path(p => p.memberships)
                .Query(q2 => q2
                    .Bool(b => b
                        .Should(s => TermAny(s, "memberships.Id", myIDSArry)))))))

然而,它返回0命中,我知道结果中应该有一些。关于我如何根据字符串列表进行搜索的任何想法?

nest elasticsearch-5 elasticsearch-net
1个回答
0
投票

实际上我找到了答案并发布了以防其他人有同样的问题。它非常简单,基于我在查询弹性搜索时所知道的,有时会使用我知道的“关键字”这个词。我通过添加.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)))))))
© www.soinside.com 2019 - 2024. All rights reserved.