我想使用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/