使用NEST和Elastic Search进行收藏

时间:2013-06-17 15:53:02

标签: elasticsearch nest

我试图通过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,所以想要正确地构造所有内容以支持它。

由于 添

1 个答案:

答案 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”,但它现在有用。