2017-05-10 17 views
0

私はフィールドを持つが得られるが.IN()と.Where()、それは2566のレコードの合計をコレクションにRavenDB:異なる結果

Index(x => x.Status, FieldIndexing.Default); 

としてインデックス付けされます。私はこのようなクエリを実行するとき

は今:

var query = _ravenSession 
    .Query<MyIndex.ReduceResult, MyIndex>() 
    .Statistics(out stats); 

query = query.Where(x => x.Status != "inactive" && x.Status != "invalid" && x.Status != "sold"); 

私は2512

の総結果数を取得しかし、私はこのようなクエリ場合:

query = query.Where(x => !x.Status.In("inactive", "invalid", "sold")); 

私は、合計結果を得ますこのカウントはどのように異なっていますか?

私は、最初のクエリが

{((((-Status:非アクティブとステータス:*)AND -Status:無効)) と-Status:販売)}に変換することを、見ることができます

2つ目:

{( AND - @ < in`ステータス>:(無効、無効、販売されています) )}

答えて

2

このクエリの処理方法には違いがあります。 最初のケースでは、Statusの結果のみを許可しています.2番目のケースでは、これらの特定の値以外のすべてを表しています。したがって、statusプロパティを持たない値があると、それが説明できます。

+0

ありがとうございました。 C#の観点からは、これらの2つの式は同じでなければなりません。そして、私はLucene構文に深く関わっていないので、私を捨てました。私があなたを正しく理解していれば、最初のクエリ(処理時)は暗黙的にヌルチェックを含みます。そして、私は実際にいくつかのレコードのフィールドでnull値を持っていました –