我已经注意到ES从v1.9升级到v5.4后发生了很多变化。
我仍然怀疑ES中的查询技术。在v1.9中,我注意到Filter选项不同。
我想知道如何在v5.4中复制以下代码
searchDescriptor.Query(q => q.Filtered(m => m.Query(n => matchQuery).Filter(o => o.And(filterContainer.ToArray()))))
在此,我看到Filter(o => o.And(filterContainer.ToArray())
如何使用v5.4执行And
或Or
操作?
Filter(o => o.And(filterContainer.ToArray())
是否表示数组中的每个项目都与And
operaton绑定?
答案 0 :(得分:1)
.And()
和.Or()
在Elasticsearch 2.0中已弃用,已在5.0中删除。您可以使用bool
query
.And()
,如果您需要评分,则使用.Must()
。如果您不需要评分,请使用.Filter()
。.Or()
,请使用.Should()
。 bool
查询可以嵌套,因此可以创建复杂的复合查询。
searchDescriptor.Query(q =&gt; q.Filtered(m =&gt; m.Query(n =&gt; matchQuery).Filter(o =&gt; o.And(filterContainer.ToArray()))))< / p>
变得类似
var matchQuery = new MatchQuery { Field = "field", Query = "query" };
var filterContainer = new QueryContainer[] {
new TermQuery { Field = "field", Value = "value" }
};
client.Search<Message>(s => s
.Query(q => q
.Bool(b => b
.Must(matchQuery)
.Filter(filterContainer)
)
)
);
已过滤的查询已在2.0中弃用,并已在5.0中删除。
在这里,我看到Filter(o =&gt; o.And(filterContainer.ToArray())如何用v5.4进行And或Or操作?
Filter(o =&gt; o.And(filterContainer.ToArray())是否指示数组中的每个项目都与And operaton绑定?
对于这些,将它们传递给bool
查询过滤器子句,这些子句是连接的,即“和”。如果您需要or
子句,则可以使用bool
查询子句中的过滤子句嵌套bool
个查询。