Tôi có một cấu trúc tài liệu như sau:RavenDb Index tĩnh: truy vấn trên bộ sưu tập con các đối tượng
Employer => Positions => RequiredSkills
tuyển dụng có một tập hợp các vị trí
Positions có một bộ sưu tập của RequiredSkill.
Kỹ năng bắt buộc bao gồm kỹ năng (chuỗi) và thành thạo (enum).
Nếu tôi sử dụng chỉ mục động, dường như nó sẽ trả về tiền phạt của công ty, tuy nhiên tôi muốn sử dụng chỉ mục để điền các kiểu xem MVC để quay lại giao diện người dùng.
Tôi thực sự mới đối với Raven nên tôi xin lỗi vì đã làm bất cứ điều gì ngu ngốc/không cần thiết!
Tôi đã có các bản đồ sau:
public class PositionSearch : AbstractIndexCreationTask<Employer>
{
public PositionSearch()
{
Map = employers =>
from employer in employers
from position in employer.Positions
select new
{
EmployerId = employer.Id,
EmployerName = employer.Name,
PositionId = position.Id,
PositionTitle = position.Title,
position.Location,
position.Description,
RequiredSkills = position.RequiredSkills
};
StoreAllFields(FieldStorage.Yes);
Index("RequiredSkills_Skill", FieldIndexing.Analyzed);
}
}
Tuy nhiên khi tôi cố gắng thực hiện các truy vấn sau đây:
var results = session.Query<PositionSearchResultModel, PositionSearch>()
.Customize(x => x.WaitForNonStaleResults())
.Where(x=>x.RequiredSkills.Any(y=>y.Skill == "SkillName"))
.ProjectFromIndexFieldsInto<PositionSearchResultModel>()
.ToList();
tôi nhận được lỗi sau:
System.ArgumentException:
The field 'RequiredSkills_Skill' is not indexed,
cannot query on fields that are not indexed
Can bất cứ ai nhìn thấy những gì tôi đang làm sai hoặc đề nghị một cách tiếp cận cho tôi xin vui lòng?
Cảm ơn,
James
CẬP NHẬT mô hình quan điểm của tôi - Cảm ơn:
public class PositionSearchResultModel
{
public PositionSearchResultModel()
{
RequiredSkills = new HashSet<SkillProficiency>();
}
public string EmployerId { get; set; }
public string EmployerName { get; set; }
public string PositionId { get; set; }
public string PositionTitle { get; set; }
public string Location { get; set; }
public string Description { get; set; }
public ICollection<SkillProficiency> RequiredSkills { get; set; }
}
Bạn đang nhầm lẫn các mục nhập chỉ mục với kết quả chỉ mục. Vui lòng cung cấp lớp 'PositionSearchResultModel' của bạn và tôi sẽ trả lời bằng một giải pháp hoàn chỉnh. Cảm ơn. –
Đã thêm mô hình chế độ xem của tôi. – Jamez
Tôi thấy bạn đang cố đánh dấu trường như được phân tích. Bạn có muốn kết hợp chính xác tên kỹ năng không? Hay bạn muốn thực hiện tìm kiếm được phân tích? –