首页 > 解决方案 > ElasticSearch 获取字段,即使它们为空或 null

问题描述

我有以下用于示例数据集的弹性搜索术语过滤器。

"filter":{
   "type":"and",
   "and":[
      {
         "type":"terms",
         "terms":{
            "field":"car_registration_no.raw",
            "terms":[
               "61123",
               "61124",
               "61125"
            ]
         }
      }
   ]
}

以下是示例结果:

{
    "result": [
      {
        "totalHits": 3,
        "hits": [
          {
            "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
            "localVersion": 2,
            "row": {
              "primaryKey": {
                "car_registration_no": "61123"
              },
              "columns": {
                "model": "Nissan",
                "submodel": "Saloon",
                "date_used": 1597017600000
              },
              "editsVersion": 0
            },
            "highlight": {}
          },
          {
            "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
            "localVersion": 2,
            "row": {
              "primaryKey": {
                "car_registration_no": "61124"
              },
              "columns": {
                "model": "Nissan",
                "submodel": "Saloon",
                "accidents": "1",
                "accident_date": "12/12/2019",
                "date_used": 1597017600000
              },
              "editsVersion": 0
            },
            "highlight": {}
          },
          {
            "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
            "localVersion": 2,
            "row": {
              "primaryKey": {
                "car_registration_no": "61125"
              },
              "columns": {
                "model": "Nissan",
                "submodel": "Saloon",
                "date_used": 1597017600000
              },
              "editsVersion": 0
            },
            "highlight": {}
          }
        ],
        "counts": {},
        "nextToken": null
      }
    ]
  }

只有一辆车,61124 号车有事故记录,我怎样才能为其他车检索空值或空白值?

我已经提到过弹性搜索,但由于我是这方面的初学者,所以我无法理解如何处理它。所以预期的结果是我希望看到空字段事故事故日期在没有值的情况下显示为空或空白,在上面的示例中,car_registration no 61123 和 61125 具有空值,因此我想检索所有字段与空白值无关。

{
    "result": [
      {
        "totalHits": 3,
        "hits": [
          {
            "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
            "localVersion": 2,
            "row": {
              "primaryKey": {
                "car_registration_no": "61123"
              },
              "columns": {
                "model": "Nissan",
                "submodel": "Saloon",
                "accidents": "null",
                "accident_date": "null",
                "date_used": 1597017600000
              },
              "editsVersion": 0
            },
            "highlight": {}
          },
          {
            "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
            "localVersion": 2,
            "row": {
              "primaryKey": {
                "car_registration_no": "61124"
              },
              "columns": {
                "model": "Nissan",
                "submodel": "Saloon",
                "accidents": "1",
                "accident_date": "12/12/2019",
                "date_used": 1597017600000
              },
              "editsVersion": 0
            },
            "highlight": {}
          },
          {
            "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
            "localVersion": 2,
            "row": {
              "primaryKey": {
                "car_registration_no": "61125"
              },
              "columns": {
                "model": "Nissan",
                "submodel": "Saloon",
                "accidents": "null",
                "accident_date": "null",
                "date_used": 1597017600000
              },
              "editsVersion": 0
            },
            "highlight": {}
          }
        ],
        "counts": {},
        "nextToken": null
      }
    ]
  }

标签: elasticsearchelasticsearch-5

解决方案


您可以使用术语查询来返回在提供的字段中包含一个或多个确切术语的文档。

添加带有搜索查询和搜索结果的工作示例(使用问题中提供的相同示例索引数据)

搜索查询:(版本 7.*)

{
  "query": {
    "terms": {
      "row.primaryKey.car_registration_no": [ "61125","61123", "61124" ]
    }
  }
}

搜索结果:

{
  "took": 16,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "stof_64398592",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
          "localVersion": 2,
          "row": {
            "primaryKey": {
              "car_registration_no": "61123"
            },
            "columns": {
              "model": "Nissan",
              "submodel": "Saloon",
              "accidents": "null",
              "accident_date": "null",         <-- note this
              "date_used": 1597017600000
            },
            "editsVersion": 0
          },
          "highlight": {}
        }
      },
      {
        "_index": "stof_64398592",
        "_type": "_doc",
        "_id": "2",
        "_score": 1.0,
        "_source": {
          "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
          "localVersion": 2,
          "row": {
            "primaryKey": {
              "car_registration_no": "61124"
            },
            "columns": {
              "model": "Nissan",
              "submodel": "Saloon",
              "accidents": "1",
              "accident_date": "12/12/2019",
              "date_used": 1597017600000            <-- note this
            },
            "editsVersion": 0
          },
          "highlight": {}
        }
      },
      {
        "_index": "stof_64398592",
        "_type": "_doc",
        "_id": "3",
        "_score": 1.0,
        "_source": {
          "schemaid": "adef89sesdceasjkmn5dlky6djj7kk189lkdqsc",
          "localVersion": 2,
          "row": {
            "primaryKey": {
              "car_registration_no": "61125"
            },
            "columns": {
              "model": "Nissan",
              "submodel": "Saloon",
              "accidents": "null",
              "accident_date": "null",           <-- note this
              "date_used": 1597017600000
            },
            "editsVersion": 0
          },
          "highlight": {}
        }
      }
    ]
  }
}

如果您使用的是版本 5.*,请阅读有关术语查询的文档,以了解其语法。


推荐阅读