我对 RavenDB 索引有疑问。
简单查询如下所示:
var values =
myCollection.Query.Where(w =>
w.MyId == MyId &&
w.IsReady == false &&
w.IsDeleted &&
w.Rate > 0)
在执行期间,Raven 创建动态索引:
from doc in docs.MyCollection
select new { Rate = doc.Rate, IsReady = doc.IsReady, IsDeleted = doc.IsDeleted, MyId = doc.MyId }
带有额外选项:字段 -> 速率;存储 -> 否;索引-> 默认;排序->双;
字段速率具有十进制类型。
问题:
我想添加静态索引,但是当我像这样指定索引时:
public class MyIndex : AbstractIndexCreationTask<MyCollection> {
public MyIndex () {
Map = d => d.Select(s => new { Rate = s.Rate, IsReady = s.IsReady, IsDeleted = s.IsDeleted, MyId = s.MyId });
Sort(x => x.Rate, SortOptions.Double);
}
}
Raven 创建的索引略有不同:
from doc in docs.MyCollection
select new { Rate = (decimal)doc.Rate, IsReady = doc.IsReady, IsDeleted = doc.IsDeleted, MyId = doc.MyId }
带有额外选项:字段 -> 速率;存储 -> 否;索引-> 默认;排序->双;
唯一的区别是我在静态索引中进行了强制转换,因为我的字段类型是十进制并且我使用的是双排序选项。
因此,Raven 没有使用我的静态索引,而是在每次执行查询时创建动态索引。
我尝试在 Sort() 中进行一些转换,但是根本没有创建索引。解决此问题的一种方法是在创建后从管理控制台手动修改静态索引,但这不是一个好的解决方案。
任何想法如何处理?谢谢。
编辑:另一个例子:
字段DateTime的类型并使用DateTime值作为谓词进行查询(大于/小于)。Raven 在动态索引创建中选择String作为 SortOption,当我尝试准备静态索引时,我遇到了强制转换问题。