2017-07-04 1 views
0

v1.9からv5.4にアップグレードした後、ESに多くの変更が加えられました。Elasticsearch.Net - v1.9からv5.4へのアップグレード後の変更

私はまだESのクエリー手法について疑問を抱いています。 v1.9では、フィルタオプションが異なることに気付きました。私はどのようにそれがAndまたはV5.4とOr操作を行うことが可能ですFilter(o => o.And(filterContainer.ToArray())を参照してくださいここで

searchDescriptor.Query(q => q.Filtered(m => m.Query(n => matchQuery).Filter(o => o.And(filterContainer.ToArray())))) 

V5.4に以下のコードを複製することができますどのように

を疑問に思って?

Filter(o => o.And(filterContainer.ToArray())は、配列内の各アイテムがAndオペランドにバインドされていることを示していますか?

答えて

1

.And()および.Or()は、Elasticsearch 2.0では推奨されず、5.0では削除されました。あなたは得点が必要な場合は、その後、.Must()を使用し、.And()ためbool query

  • に置き換えることができます。採点が必要ない場合は、.Filter()を使用してください。
  • .Or()の場合は、.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で除去したものとなります。

ここで私はそれがV5.4でANDまたはOR演算を行うことが可能です?

= O(フィルターどのようにフィルター(O => o.And(filterContainer.ToArrayを())を参照してください> o.And(filterContainer.ToArray())連言である、フィルタ句を、これらのために

?配列内の各アイテムは、そしてoperatonにバインドされていることを示しているboolクエリに渡しすなわちAND演算。or句が必要な場合は、boolクエリsh内のフィルタ句を使用してboolクエリをネストできますould句。

+0

ありがとうございます。たくさんの意味があります。どうやら '.Missing()'と '.Not()'はES 5に何か新しいことがありますか?本当に返信を感謝します。再度、感謝します。 – Mark

関連する問題