2017-07-04 21 views
0

从v1.9升级到v5.4后,我注意到ES中有很多变化。Elasticsearch.Net - 从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())怎么可能做一个And或V5.4的Or操作复制下面的代码?

Filter(o => o.And(filterContainer.ToArray())是否表示数组中的每个项目都与And operaton绑定?

回答

1

.And().Or()已在Elasticsearch 2.0中弃用,并在5.0中删除。你可以用bool query

  • 更换这些部件.And(),如果你需要得分,然后使用.Must()。如果您不需要评分,请使用.Filter()。使用.Should()

bool查询可以嵌套,因此可以创建复杂的复合查询。

searchDescriptor.Query(Q => q.Filtered(M => m.Query(N => matchQuery).Filter(O => o.And(filterContainer.ToArray()))))

变得像

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移除。

在这里,我看到过滤器(O => o.And(filterContainer.ToArray())怎么可能做一个和或V5.4 OR操作?

会过滤(O = > o.And(filterContainer.ToArray())表明,该阵列中的每个项目与AN和operaton约束?

对于这些,将它们传递到一个bool查询过滤器子句是结膜即AND后的。如果你需要or子句,你可以在bool查询中嵌入bool查询和筛选子句sh应该从句。

+0

谢谢。具有很大的意义。对于'.Missing()'和'.Not()',ES 5有什么新东西?真的很感激答复。再次感谢。 – Mark

相关问题