elasticsearch - 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
}
]
}
解决方案
您可以使用术语查询来返回在提供的字段中包含一个或多个确切术语的文档。
添加带有搜索查询和搜索结果的工作示例(使用问题中提供的相同示例索引数据)
搜索查询:(版本 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.*,请阅读有关术语查询的文档,以了解其语法。
推荐阅读
- laravel - $hidden 在 eloquent 模型中究竟有什么作用?
- vue.js - 如何使用 Vue.js 访问从 axios get 返回的数据以显示在网页上?
- reinforcement-learning - 优化算法和强化学习方法的区别
- php - 压缩图像的问题
- python - 在 os.path.getsize() 的路径中使用通配符会返回错误:OSError
- laravel - 或有条件的身份验证 - LARAVEL
- google-app-engine - Google App Engine - 延迟突然增加
- python - 自动标记两条绘制线之间的最近点?
- java - java方法有问题,因为它给了我2倍的答案
- php - 如何在 php 网站上显示 wordpress 博客文章