如何解决应该+必须组合查询使用 NEST 客户端进行弹性查询
我需要根据属性与 OR 和 AND 组合的组合来获取数据,但我无法完成此查询。帮助我了解 json 和 NEST 客户端应该是什么样子。
SQL 查询:
Title
到目前为止,我的查询构建了所有导致较少结果或没有结果的必须查询。所以理论上我相信每个查询都是 MUST 查询,所有必须的查询都必须使用 OR 合并。
帮我构建json
解决方法
你的方法很好,查询看起来像
var searchResponse = await elasticClient.SearchAsync<EsDocument>(s => s
.Query(q =>
(
q.Terms(t => t.Field(f => f.Flag1.Suffix("keyword")).Terms("Y","N")) &&
q.Terms(t => t.Field(f => f.EntityStatus.Suffix("keyword")).Terms("STAT1","STAT2")) &&
q.Terms(t => t.Field(f => f.EntityType.Suffix("keyword")).Terms("T3"))
) ||
(
q.Terms(t => t.Field(f => f.Flag1.Suffix("keyword")).Terms("N")) &&
q.Terms(t => t.Field(f => f.EntityType.Suffix("keyword")).Terms("T1","T2"))
)));
你没有分享你的索引映射和查询,很难说你的查询为什么不起作用。
更新
您可以使用以下内容动态编写此类查询
var should = new QueryContainer();
should |=
(
new TermsQuery { Field = Infer.Field<EsDocument>(f => f.Flag1.Suffix("keyword")),Terms = new []{ "Y","N" }} &&
new TermsQuery { Field = Infer.Field<EsDocument>(f => f.EntityStatus.Suffix("keyword")),Terms = new []{ "STAT1","STAT2" }} &&
new TermsQuery { Field = Infer.Field<EsDocument>(f => f.EntityType.Suffix("keyword")),Terms = new []{ "T3" }}
);
should |=
(
new TermsQuery { Field = Infer.Field<EsDocument>(f => f.Flag1.Suffix("keyword")),Terms = new []{ "N" }} &&
new TermsQuery { Field = Infer.Field<EsDocument>(f => f.EntityType.Suffix("keyword")),Terms = new []{ "T1","T2" }}
);
var searchResponse = await elasticClient.SearchAsync<EsDocument>(s => s
.Query(q => should));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。