1

RavenDB (ビルド 2330) では、索引付けされた用語の 1 つの文字列の長さで結果を並べ替えようとしています。

var result = session.Query<Entity, IndexDefinition>()
                    .Where(condition)
                    .OrderBy(x => x.Token.Length);

ただし、結果はソートされていないように見えます。これは RavenDB で (または Lucene クエリを介して) 可能ですか? もしそうなら、構文は何ですか?

4

1 に答える 1

2

並べ替えるには IndexDefinition にフィールドを追加し、SortOptionを Int またはより適切なものに定義する必要があります (ただし、デフォルトである String を使用したくありません)。

例のように Linq API を使用する場合は、Token_Length という名前のフィールドをインデックスの Map 関数に追加する必要があります (Matt のコメントを参照)。

from doc in docs
     select new
     {
         ...
         Token_Length = doc.TokenLength
     }

そして、Linq API を使用してクエリを実行できます。

var result = session.Query<Entity, IndexDefinition>()
                    .Where(condition)
                    .OrderBy(x => x.Token.Length);

または、フィールドの名前を TokenLength (または Token_Length 以外のもの) にしたい場合は、LuceneQuery を使用できます。

from doc in docs
     select new 
     {
         ...
         TokenLength = doc.Token.Length
     }

そして、次のようにクエリします。

var result = session.Advanced.LuceneQuery<Entity, IndexDefinition>()
                    .Where(condition)
                    .OrderBy("TokenLength");
于 2013-04-12T10:08:13.113 に答える