Ravendb 如何在AbstractIndexCreationTask中定义字段?
我的应用程序中有一个Ravendb 如何在AbstractIndexCreationTask中定义字段?,ravendb,Ravendb,我的应用程序中有一个AbstractIndexCreationTask,如下所示: public class EventsForMainQueries : AbstractIndexCreationTask<Event> { public EventsForMainQueries() { Map = docs => from doc in docs select new
AbstractIndexCreationTask
,如下所示:
public class EventsForMainQueries : AbstractIndexCreationTask<Event>
{
public EventsForMainQueries()
{
Map = docs => from doc in docs
select new
{
DatePublished = doc.DatePublished,
IsDeleted = doc.IsDeleted,
Author = doc.Author,
EventDate = doc.EventDate
};
Index(x => x.DatePublished, FieldIndexing.Default);
Sort(x => x.DatePublished, SortOptions.String);
Index(x => x.EventDate, FieldIndexing.Default);
Sort(x => x.EventDate, SortOptions.String);
}
}
公共类事件FormainQueries:AbstractIndexCreationTask
{
公共事件FormainQueries()
{
Map=docs=>来自文档中的文档
选择新的
{
DatePublished=doc.DatePublished,
IsDeleted=文件IsDeleted,
作者=文件作者,
EventDate=doc.EventDate
};
索引(x=>x.DatePublished,fieldindex.Default);
排序(x=>x.DatePublished,SortOptions.String);
索引(x=>x.EventDate,fieldindex.Default);
排序(x=>x.EventDate,SortOptions.String);
}
}
但是,RavenDB仍在创建以下自动索引
我需要在IndexCreationTask中更改什么以防止生成临时/自动索引?您是否调用过
IndexCreation.CreateIndexes(typeof(EventsForMainQueries).Assembly,documentStore)
或以任何其他方式在服务器上创建该索引
您还可以使用以下命令“强制”读取索引:
session.Query()..
如果索引不在服务器上,则此查询不应创建临时索引 试试这个
存储索引:
EventsForMainQueries.Execute(DocumentStore);
查询事件:
Session.Query<Event, EventsForMainQueries>()
Session.Query()
Temp索引被装箱以响应未指定索引的查询。你做了什么查询?@MattJohnson根据索引名,我按EventDate:[…]查询,并删除:…
按EventDate排序。如果没有order by,则使用我的索引,添加order by将创建带有字段的临时索引。那么,如何在代码中定义索引,以便我们在图像中看到的EventDate字段的设置在代码中复制?@GregB假设doc.EventDate是DateTime,我认为您不需要做任何事情。另外,我认为你永远不需要做索引(日期)。我没有使用与日期相关的索引/排序。我唯一一次使用索引是为了(FieldIndexing.analysis)。我确实经常使用Store()。我从索引流式传输结果,不带回完整的文档。指定索引已起作用,但我认为RavenDB在创建临时索引之前检查了它是否有可用于完成查询的索引?@GregB我看不出它需要创建自动索引的具体原因。如果使用排序,则需要注意EventDate是否为DateTime或DateTimeOffset。文本将不会得到正确的排序,因为它将按词汇排序,而不是按日期排序。谢谢,对于DateTime
字段,正确的排序是什么?