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

Lucene 按其中一个字段的字符串长度对查询排序,lucene,ravendb,lucene.net,Lucene,Ravendb,Lucene.net,在RavenDB(build2330)中,我试图按照其中一个索引项的字符串长度对结果进行排序 var result = session.Query<Entity, IndexDefinition>() .Where(condition) .OrderBy(x => x.Token.Length); var result=session.Query() .何处(条件) .OrderBy(x=>x.T

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

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

然而,结果看起来是未排序的。这在RavenDB中是否可能(或通过Lucene查询),如果可能,语法是什么?

您需要将字段添加到IndexDefinition、order by、Int或其他更合适的内容中(但不希望使用默认的字符串)

如果您想像在您的示例中那样使用Linq API,则需要将名为Token_Length的字段添加到index'Map函数中(请参见Matt的注释):

然后可以使用Linq API进行查询:

var result = session.Query<Entity, IndexDefinition>()
                    .Where(condition)
                    .OrderBy(x => x.Token.Length);
您可以这样查询:

var result = session.Advanced.LuceneQuery<Entity, IndexDefinition>()
                    .Where(condition)
                    .OrderBy("TokenLength");
var result=session.Advanced.LuceneQuery()
.何处(条件)
.OrderBy(“TokenLength”);

是。但是,如果该字段使用名称
Token\u Length
进行索引,那么他可以只使用原始问题中显示的linq查询。(默认的转换约定是将句点映射到下划线。)正如您所提到的,重要的部分是将排序顺序定义为int。
from doc in docs
     select new 
     {
         ...
         TokenLength = doc.Token.Length
     }
var result = session.Advanced.LuceneQuery<Entity, IndexDefinition>()
                    .Where(condition)
                    .OrderBy("TokenLength");