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