我试图通过NEST .Net api弄脏Elastic Search并遇到一些问题。我怀疑我误解了某些东西,或者我的文档建模不正确但会感激一些帮助。
我有一个包含馆藏的文件。下面是一个类似的陈腐的例子:
public class Company
{
public DateTime RegisteredOn {get;set;}
public string Name {get;set;}
[ElasticProperty(Type = FieldType.nested)]
public List<Employee> Employees {get;set;}
}
public class Employee
{
public string FirstName {get;set;}
public string LastName {get;set;}
[ElasticProperty(Type = FieldType.nested)]
public List<SalesFigure> SalesFigures {get;set}
}
public class SaleFigure
{
public int AverageMonthlySaleValue {get;set;}
public int AverageVolumeSold {get;set;}
}
我已经在层次结构的每个级别创建了一个包含一些数据的索引,并且在编制索引之前调用了client.MapFromAttributes<Company>();
以下是有效的,但我想了解我如何找到所有员工都拥有第一名Bob的公司,或者找到所有员工平均具有AverageMonthlySaleValue&gt;的公司。 $ 1100
client.Search<Company>(query => query.Index("companies").Type("company")
.From(0)
.Size(100)
.Filter(x => x.Term(n => n.Name, "Microsoft")));
已经建议嵌套查询/过滤器,因为有建议我应该将我的文档展平,但是我正在尝试创建一个更好地代表真实域的模型,因此陷入了困境。
同样,我知道我还必须在某些时候使用facet,所以想要正确地构造所有内容以支持它。
由于 添
答案 0 :(得分:2)
事实证明,我的文档结构没有太大问题。这个例子是陈腐的,我在一个集合上查询的真实属性是一个字符串,而不是一个int,因此引入了区分大小写。
我不得不更改查询以使用小写字符串值进行比较。像下面这样的东西。
client.Search<Company>(query => query.Index("companies")
.Type("company")
.From(0)
.Size(100)
.Filter(x => x.Term("company.employees.firstName", "microsoft")));
我还在研究如何使用lamda代替“company.employees.firstName”,但它现在有用。