c# - Elasticsearch Nest Client - 搜索嵌套属性

标签 c# elasticsearch nest fluent

我很难找到有关如何使用 C# 中的 Nest 客户端搜索嵌套属性的信息。

我的索引中的电子邮件对象的形状大致如下:

    {
      subject: “This is a test”,
      content: “This is an email written as a test of the Elasticsearch system.  Thanks, Mr Tom Jones”,
      custodians: [
        {
          firstName: “Tom”,
          lastName: “Jones”,
          routeType: 0
        },
        {
          firstName: “Matthew”,
          lastName: “Billsley”,
          routeType: 1
        }
      ]
    }

您应该能够看到其中有一个名为“custodians”的数组,它是电子邮件的所有发件人和收件人的列表。在 .Net 中的 Fluent 风格的查询构建器中,当我使用主题、内容和其他“第一层”属性时,我可以很好地构建查询。但我可能只想在某些查询中包含routeType = 0 的托管人。我似乎找不到任何关于如何实现这一目标的指导。有什么想法吗?

例如,在主题字段中查询术语“野餐”将如下所示:

Client.SearchAsync(m => m
  .Query(q => q
    .Match(f => f
      .Field(msg => msg.Subject)
      .Query(“picnic”))));

仅从routeType = 0且lastName =“Jones”的索引获取消息的查询是什么?

仅供引用:此内容交叉发布到 Elasticsearch 论坛。如果我在那里得到好的建议,我会在这里添加。

最佳答案

如果您想获取具有 routeType == 0 托管人的消息:

Client.SearchAsync(m => m
  .Query(q => q
    .Term(t => t
      .Field(msg => msg.Custodians[0].RouteType)
      .Value(0))));

如果您想获取保管人为 lastName == "jones" 的消息:

Client.SearchAsync(m => m
  .Query(q => q
    .Term(t => t
      .Field(msg => msg.Custodians[0].LastName)
      .Value("jones"))));

如果您想获取托管人为 lastName == "jones" AND routeType == 0 的消息:

Client.SearchAsync(m => m
  .Query(q => q
    .Nested(t => t
      .Path(msg => msg.Custodians)
      .Query(nq =>
        nq.Term(t => t.Field(msg => msg.Custodians[0].RouteType).Value(0) &&
        ng.Term(t => t.Field(msg => msg.Custodians[0].LastName).Value("jones")
      )
    )
  )
);

请注意,custodians 需要映射为嵌套字段,最后一个查询才能按预期工作。请参阅here有关嵌套字段的更多信息。

关于c# - Elasticsearch Nest Client - 搜索嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733300/

相关文章:

elasticsearch - ElasticSearch聚合始终仅返回10个存储桶

c# - 如何使用 asp.net C# 将 Html 表下载到 Excel 文件中

c# - 检查项目后会触发哪个 CheckedListBox 事件?

elasticsearch - 使用rpm在5.2.1中配置elasticsearch.yml的问题

elasticsearch - 匹配词组查询未按预期工作

c# - Elastic Search 术语查询未给出结果,但匹配查询给出

Java 日期方法?类? joptionpane/输出/显示数据库中数组列表中的对象?

c# - 如果 Int32 只是 int 的别名,那么 Int32 类如何使用 int?

c# - 传递给 Controller ​​操作的参数

elasticsearch - 具有Metricbeat的卷使用的Kubernetes百分比