我有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 }
有额外选项:Field - > Rate;存储 - >否;索引 - >默认;排序 - >双倍;
字段 Rate 具有 decimal 类型 .
Problem:
我想添加静态索引,但是当我像这样指定索引时:
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 }
有额外选项:Field - > Rate;存储 - >否;索引 - >默认;排序 - >双倍;
唯一的区别是我在静态索引中进行了转换,因为我的字段类型是 decimal 而我正在使用 Double sort选项 .
因为Raven没有使用我的静态索引,而是在每次执行查询时创建动态索引 .
我尝试在Sort()中进行一些转换,但是根本没有创建索引 . 解决此问题的一种方法是在创建静态索引后从管理控制台手动修改静态索引,但这不是一个好的解决方案 .
任何想法如何处理?谢谢 .
编辑:另一个例子:
字段类型 DateTime 并使用 DateTime 值作为谓词查询(大于/小于) . 动态索引创建中的Raven选择 String 作为SortOption,当我尝试准备静态索引时,我会遇到转换问题 .
1 回答
您可以使用
IDocumentSession.Query(string indexName, [bool isMapReduce])
或IDocumentSession.Query<TResult, TIndexCreator>()
重载来显式指定静态索引 . 因此,在您的特定情况下,IDocumentSession.Query<MyCollection, MyIndex>()
或IDocumentSession.Query("MyIndex")
.