【发布时间】:2015-04-28 20:16:59
【问题描述】:
考虑到这种情况:
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string SecondName { get; set; }
}
class Student : Person
{
}
class Worker : Person
{
}
class PersonViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string FullName { get; set; }
}
public class PersonIndex : AbstractMultiMapIndexCreationTask<PersonViewModel>
{
public PersonIndex()
{
AddMapForAll<Person>(docs => from doc in docs
select new PersonViewModel
{
Id = doc.Id,
Name = doc.Name,
Surname = doc.Surname,
FullName = doc.Name + " " + doc.SecondName + " " + doc.Surname
});
StoreAllFields(FieldStorage.Yes);
Indexes.Add(x => x.Id, FieldIndexing.No);
Indexes.Add(x => x.FullName, FieldIndexing.No);
Indexes.Add(x => x.Name, FieldIndexing.Analyzed);
Indexes.Add(x => x.Surname, FieldIndexing.Analyzed);
}
}
var queryResult = session.Query<PersonViewModel, PersonIndex>()
.Where(x => x.Name.StartsWith("A"))
.Where(x => x.Surname.StartsWith("C"))
.ProjectFromIndexFieldsInto<PersonViewModel>()
.ToList();
这只是一个示例,在我的场景中,我有 7/8 个这样的索引,其中包含更多映射字段,并且原始类 Person 扩展了 2 个以上的类(15 分钟)。 每个索引大约 5000 个文档。
我可以做些什么来提高我的索引和性能?
【问题讨论】:
-
你目前的表现如何?
-
@AyendeRahien 当我更新索引时,重新索引所有文档需要 10/15/20 分钟,这是正常的时间吗?
-
你有多少文件?请注意,您正在存储所有字段,并且在那里启用了全文搜索。
-
@AyendeRahien 我正在存储所有字段,因为我需要这些字段(不正确?)而且我还需要对姓名和姓氏进行全文搜索;每个索引从 4000 到 10000 个文档
-
请注意,这可能在邮件列表中处理得更好。您通常不需要将所有字段都存储在索引中。你在哪里运行这个?
标签: c# .net performance indexing ravendb