构建具有嵌套属性的 NEST/ElasticSearch 查询

Constructing a NEST/ElasticSearch query with nested properties

我正在使用 C# 中的 NEST 查询 ElasticSearch 数据库(丹麦 CVR 注册表)。我正在尝试制定一个将查询此方案的查询:

relations: [
    {
        participant: {
            key: 123123
        },
        organisations: [
            {
                organisationName: {
                    name: "some string",
                    period: {
                        from: "SOME DATE"
                        to: "SOMEDATE OR NULL"
                    }
                },
                ... more of similar objects ..
            }
        ]
    },
    .. more of similar objects ..
]

我的问题是我需要找到具有特定 participant.key 值的文档,同时具有特定的 organisations.organisationName.name 和 [=27= 中的缺失值或空值]

我知道我需要使用嵌套查询来获取在 to 字段中具有空值且在 name 字段中具有特定名称的文档,但最重要的是我还需要在particiant.key 字段,这就是我遇到麻烦的地方。请注意,我检查的所有 3 个字段必须在同一个关系对象中,并且 to 和 name 字段必须在同一个 organizationName 对象中。

没有关键部分的查询作为JSON查询是这样的:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path":       "relations.organisations.organisationName",
            "score_mode": "max", 
            "query": {
              "bool": {
                "must": [
                  { "match": { "relations.organisations.organisationName.name": "EJERREGISTER" }},
                  {"filtered": { "filter" : {
                   "missing" : { "field" : "relations.organisations.organisationName.period.to" }
                  } } }
                ]
        }}}}
      ]
}}}

希望有人擅长在 NEST 查询 DSL 中进行这些查询。我也可以使用纯 ElasticSearch JSON 查询,但 .NET 等效项将是我的首选:)

提前致谢!

经过一些实验,我得出的结论是,我的问题的正确答案是使用嵌套查询的查询,该查询 1. 检查密钥,并且 2. 有一个嵌套查询来执行我需要的其他操作organisation.organisationName 对象。

但是,我无法完全验证这一点,因为我正在查询的数据库没有标记为嵌套的关系对象(而且我无法更改它,因为它是政府数据库)

我的解决方法是检索与我的键相关的所有关系,然后过滤掉内存中剩余的对象,因为这在我的场景中并没有太多开销。

编辑:作为后续行动,我使用的外部数据库添加了嵌套子句,它的工作原理如上所述。