1

RavenDB で一部のデータをフィルター処理する lucene クエリを作成しようとしています。この特定のコレクション内の一部のドキュメントには連番が割り当てられており、有効な範囲は連続していません (たとえば、1 つの範囲は 100 から 200 で、別の範囲は 1000 から 1400 です)。Raven Studio (v2.5、Silverlight クライアント) を使用して RavenDB にクエリを実行し、これらのユーザー定義の範囲外の値を持つすべてのドキュメントを取得したいと考えています。

これは非常に単純化された文書構造です:

{  
   ExternalId: something/1,
   SequentialNumber: 12345
}

テストするために、3500 個のドキュメントを追加しました。これらのドキュメントはすべて、 とのSequentialNumber2 つの範囲のいずれかに含まれています。フィールドは親ドキュメントへの参照であり、このテストではすべてのドキュメントのフィールドが に設定されています。これは、私が思いついた Lucene クエリです。123-3129000-18000100000123ExternalIdsomething/1

ExternalId: something/1 AND NOT 
(SequentialNumber: [123 TO 321] OR SequentialNumber: [9000 TO 18000])

RavenDB の Studio でクエリを実行するSequentialNumberと、123-321範囲外のすべてのドキュメントが返されます。100000123として持っているドキュメントのみを返すと思いSequentialNumberます。Google に助けを求めようとしてきましたが、これまでのところ、正しい方向に導くものは何も見つかりませんでした。

私は何を間違っていますか?

4

1 に答える 1

1

RavenDB は、数値を 2 つの方法でインデックス付けしています。1 つは文字列 (ここに表示されているもの) として、もう 1 つは数値形式です。範囲クエリの場合:

SequentialNumber_Range: [Ix123 TO Ix321] OR SequentialNumber_Range: [Ix9000 TO Ix18000])

Ix プレフィックスは、int32 を使用していることを意味します

于 2015-08-19T17:37:40.847 に答える