我想使用NEST编写查询,如下所述:
https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-span-near-query.html

我有一组值用作SpanTerm子句。集合大小因查询而异。

如果集合大小有限,我可以这样做:

var sn = q.SpanNear(snr => snr.Clauses(c => c.SpanTerm(), c => c.SpanTerm(), ...))

我如何动态地执行(未知的子句数)?

最佳答案

您可以使用以下扩展方法:

public static class SpanNearQueryDescriptorExtensions
{
    public static void SpanTermClauses<T>(this SpanNearQueryDescriptor<T> descriptor, Expression<Func<T, object>> field, string[] terms)
        where T : class
    {
        descriptor.Clauses(terms
            .Select(t => new Func<SpanQuery<T>, SpanQuery<T>>(query => query.SpanTerm(field, t)))
            .ToArray());
    }
}

用法:
var terms = new[] {"term1", "term2"};

client.Search<Docuemnt>(s => s
    .Query(q => q
        .SpanNear(sp => sp
            .Slop(12)
            .SpanTermClauses(f => f.Title, terms))));

希望能帮助到你。

关于elasticsearch - Nest-如何在具有多个子句的查询附近编写跨度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33380790/

10-11 09:06