Elasticsearch - 我如何搜索 2 个字段。 1 必须为空,其他必须匹配搜索文本

Elasticsearch - How do i search on 2 fields. 1 must be null and other must match search text

我正在尝试在 elasticsearch 6.8 上进行搜索。 我无法控制弹性搜索实例,这意味着我无法控制数据的索引方式。

当我进行匹配时,我的数据结构是这样的。所有搜索:

  { "took": 4,
    "timed_out": false,
    "_shards": {
        "total": 13,
        "successful": 13,
        "skipped": 0,
        "failed": 0
    },
"hits": {
    "total": 2,
    "max_score": 15.703552,
    "hits": [    {
            "_index": "(removed index)",
            "_type": "_doc",
            "_id": "******** (Removed id)",
            "_score": 15.703552,
            "_source": {
                "VCompany": {
                    "cvrNummer": 12345678,
                    "penheder": [
                        {
                            "pNummer": 1234567898,
                            "periode": {
                                "gyldigFra": "2013-04-10",
                                "gyldigTil": "2014-09-30"
                            }
                        }
                    ],
                    "vMetadata": { 
                        "nyesteNavn": {
                            "navn": "company1",
                            "periode": {
                                "gyldigFra": "2013-04-10",
                                "gyldigTil": "2014-09-30"
                            }
                        },
                        }
                    }
                }
            }
        }]

json 可能不完整,因为我删除了一些不需要的数据。所以我想做的是搜索哪里:“vCompany.vMetaData.nyesteNavn.gyldigTil”为空,哪里“vCompany.vMetaData.nyesteNavn.navn”将匹配文本字符串。

我试过这样的事情:

{
"query": {
    "bool": {
        "must": [
            {"match": {"Vrvirksomhed.virksomhedMetadata.nyesteNavn.navn": "company1"}}
        ],
        "should": {
            "terms": {
                "Vrvirksomhed.penheder.periode.gyldigTil": null
            }
        }
    }
}

您需要使用 must_notexists 查询,如下所示,以检查字段是否为 null。下面的查询将给出 company1 匹配且 Vrvirksomhed.penheder.periode.gyldigTil 字段为空的结果。

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "Vrvirksomhed.virksomhedMetadata.nyesteNavn.navn": "company1"
          }
        }
      ],
      "must_not": [
        {
          "exists": {
            "field": "Vrvirksomhed.penheder.periode.gyldigTil"
          }
        }
      ]
    }
  }
}