考虑这种情况:
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个文档。
我可以做些什么来改善我的索引和表现?
答案 0 :(得分:0)
查看您的查询,看起来您对所选记录感兴趣,其中“姓名”或“姓氏”以特定字母开头。
您是否考虑过修改您的收藏品以获得包含此类信息的字段?例如,如果您有“姓名:迈克尔”和“姓氏:史密斯”,也许您还应该有一个“FirstLetterName:M”和“FirstLetterSurname:S”并为这些字段添加索引。