【问题标题】:Querying nested path from list of strings in Elasticsearch using nest使用嵌套从 Elasticsearch 中的字符串列表中查询嵌套路径
【发布时间】:2019-08-25 04:01:37
【问题描述】:

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

    .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 中的 Id 列表,我想用它在 elasticsearch 中称为成员资格的嵌套路径字段中进行搜索。这个我试过了

    .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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多