Mam strukturę dokumentu tak:RavenDb Index statyczny: zapytanie o kolekcji obiektów podrzędnych
Employer => Positions => RequiredSkills
pracodawca kolekcję stanowiska
Pozycje mieć kolekcję RequiredSkill.
Wymagany skill składa się z umiejętności (ciąg) i umiejętności (enum).
Jeśli korzystam z indeksu dynamicznego, wydaje się, że zwraca on grzywnę firmy, jednak chcę użyć indeksu do wypełnienia modeli widoku MVC, aby powrócić do interfejsu użytkownika.
Jestem naprawdę nowy w Raven, więc przepraszam za zrobienie czegoś głupiego/niepotrzebnego!
Mam następujące odwzorowanie:
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);
}
}
Jednak gdy próbuję wykonać następujące zapytanie:
var results = session.Query<PositionSearchResultModel, PositionSearch>()
.Customize(x => x.WaitForNonStaleResults())
.Where(x=>x.RequiredSkills.Any(y=>y.Skill == "SkillName"))
.ProjectFromIndexFieldsInto<PositionSearchResultModel>()
.ToList();
pojawia się następujący błąd:
System.ArgumentException:
The field 'RequiredSkills_Skill' is not indexed,
cannot query on fields that are not indexed
Can Czy ktoś widzi, co robię źle, lub sugeruje mi inne podejście?
Dzięki,
James
UPDATE moim zdaniem model - Thanks:
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; }
}
Mylicie wpisy indeksu z wynikami indeksu. Podaj swoją klasę 'PositionSearchResultModel', a ja odpowiem kompletnym rozwiązaniem. Dzięki. –
Dodano mój model widoku. – Jamez
Widzę, że próbujesz oznaczyć to pole jako analizowane. Czy chcesz dokładnego dopasowania nazwy umiejętności? A może chcesz przeprowadzić analizowane wyszukiwanie? –