我試圖指示RavenDB排序一個數字字段的特定索引,類看起來像這樣;RavenDB - 索引「排序」似乎失敗
class Level {
public int Number {
get;
set;
}
public string Id {
get;
set;
}
// other properties not listed
}
所以我用一個簡單的循環創建了15,000個文檔,數字字段從1增加到15000。這個效果很好。
現在,當我查詢它時,我希望它通過 - 默認,按數字順序排序。所以我第一次嘗試使用標準OrderBy
。
var query = RavenSession
.Query<Level>()
.Customize(c => c.WaitForNonStaleResults())
.OrderBy(r => r.Number)
.ToList();
這當然沒有奏效。我結束了類似的列表..
[levels/1]
[levels/3751]
[levels/8583]
[levels/2828]
這對我來說甚至沒有意義。所以我試着指定一個索引。
public class Level__ByNumber : AbstractIndexCreationTask<Models.Level> {
public Level__ByNumber() {
Map = results => from result in results
select new {
Id = result.Id,
Number = result.Number
};
Sort(n => n.Number, SortOptions.Int);
}
}
然後被稱爲完全按照我承擔索引稱爲...
RavenQueryStatistics statistics;
var query = RavenSession
.Query<Level, Level_ByNumber>()
.Customize(c => c.WaitForNonStaleResults())
.Statistics(out statistics);
if(searchable != null) {
query = query.Search(n => n.Number, searchable);
}
var results = query.ToList();
而且仍然沒有運氣;這個列表是以奇怪的順序加擾的。我也試過SortOptions.Short
和SortOptions.String
無濟於事。我究竟做錯了什麼?我如何獲得這個索引只是以預期的順序返回對象?
我已經徹底閱讀了關於此的文檔以及其他堆棧溢出問題,如This和建議的信息不起作用。
(這裏使用的是你需要調用'.OrderBy了''Level__ByNumber指數(R => r.Number)'自定義 – wal
後,我試圖這樣說,也沒有影響。 – Ciel
你是否在註冊你的索引時開始ravendb?例如'IndexCreation.CreateIndexes(typeof(Users_ByUsername).Assembly,_store)'? – wal