按其中一个字段的字符串长度排序查询

时间:2013-04-12 08:01:55

标签: lucene ravendb lucene.net

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

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

但是结果看起来没有排序。这是否可以在RavenDB中(或通过Lucene查询),如果是这样,语法是什么?

1 个答案:

答案 0 :(得分:2)

你需要在IndexDefinition中添加一个字段来排序,将define the 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");