1

在 RavenDB(build 2330)中,我试图按索引项之一的字符串长度对结果进行排序。

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,则需要在索引的 Map 函数中添加一个名为 Token_Length 的字段(请参阅 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 回答