在RavenDB(build 2330)中,我试图按照其中一个索引术语的字符串长度对结果进行排序。
var result = session.Query<Entity, IndexDefinition>()
.Where(condition)
.OrderBy(x => x.Token.Length);
但是结果看起来没有排序。这是否可以在RavenDB中(或通过Lucene查询),如果是这样,语法是什么?
答案 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");