弹性搜索中具有动态字段的过滤器

Filters with dynamic fields in elasticsearch

我正在将非常旧的 ElasticSearch 版本切换到 6.5 版。

...  
  "text_mined_entities": {
            "nlp": {
                "abbreviations": [],
                "chunks": [],
                "recurring_chunks": [],
                "tagged_entities_grouped": {
                    "NEURO|SCICRUNCH": [
                        {
                            "category": "NEURO",
                            "end": 41,
                            "label": "Infant",
                            "match": "infant",
                            "original_value": "Infant",
                            "reference": "BIRNLEX695",
                            "reference_db": "SCICRUNCH",
                            "sentence": 0,
                            "start": 35
                        },
...

我想过滤 text_mined_entities.nlp.tagged_entities_grouped.*.reference 字段(存储为 'keyword' ),但运气不佳。类似于:

GET _search
{
  "query": {
    "bool": {
      "filter": { "term": {
        "text_mined_entities.nlp.tagged_entities_grouped.*.reference": "BIRNLEX695"

      }}

    }
  }
}

有什么建议吗?谢谢。

不能对字段查询应用通配符。相反,您可以使用 query_string ,它也支持字段上的通配符。所以以下将起作用:

假设 text_mined_entitiesnlp 的类型是 nested

{
  "query": {
    "nested": {
      "path": "text_mined_entities.nlp",
      "query": {
        "query_string": {
          "query": "BIRNLEX695",
          "fields": [
            "text_mined_entities.nlp.tagged_entities_grouped.*.reference"
          ]
        }
      }
    }
  }
}

更新(如果text_mined_entitiesnlpobject类型而不是nested):

{
  "query": {
    "query_string": {
      "query": "BIRNLEX695",
      "fields": [
        "text_mined_entities.nlp.tagged_entities_grouped.*.reference"
      ]
    }
  }
}