根据 Elasticsearch 文档,无法索引或搜索空值 null。 当一个字段设置为 null(或空数组或空值数组)时,它被视为该字段没有值。
那么如何找到product_name 为空(null)的文件呢?
你可以在配置索引映射时定义 null_value 参数。 它将允许你在索引文档时用指定值替换显式空值 null,以便它可以被索引和搜索。
(相关资料图)
让我们创建索引名称 products,其中包含值为 NULL 的 product_name 字段。
PUT products
{
"mappings": {
"properties": {
"product_name":{
"type": "keyword",
"null_value": "NULL"
}
}
}
}让我们用 product_name 字段索引一些文档,该字段的值为 null 或空数组。
POST products/_doc/1
{
"product_name": null,
"company":"apple"
}
POST products/_doc/2
{
"product_name": [],
"company":"apple"
}
让我们查询并检查我们得到的结果:
POST products/_search
{
"query": {
"match": {
"product_name": "NULL"
}
}
}
上面的搜索结果为:
`
{
"took": 1009,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "products",
"_id": "1",
"_score": 0.2876821,
"_source": {
"product_name": null,
"company": "apple"
}
}
]
}
}
`
什么??? 为什么 Elasticsearch 只返回一个文档而不返回第二个具有空数组的文档? 因为,
一个空数组不包含明确的 null,因此不会被 null_value 替换。此外,product_name 值仅作为 null 而不是作为在索引映射中设置的 NULL。 因为,
null_value 只影响数据的索引方式,它不会修改 _source 文档。现在,当 product_name 为 null 或空数组时,如何将两个文档都放入结果中?
让我们定义没有 null_value 的索引映射和与上面相同的索引文档。
PUT products
{
"mappings": {
"properties": {
"product_name":{
"type": "keyword"
}
}
}
}
现在你可以使用以下查询:
POST products/_search
{
"query": {
"bool": {
"must_not": [
{
"exists": {
"field": "product_name"
}
}
]
}
}
}
上述查询的结果,它现在返回两个结果:
`
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 0,
"hits": [
{
"_index": "products",
"_id": "1",
"_score": 0,
"_source": {
"product_name": null,
"company": "apple"
}
},
{
"_index": "products",
"_id": "2",
"_score": 0,
"_source": {
"product_name": [],
"company": "apple"
}
}
]
}
}
`
将 must_not 与 exists 查询一起使用的优点:
此选项 2 不依赖于字段的数据类型,无论字段的数据类型如何,它都会起作用,但选项 1 null_value 需要与字段的数据类型相同。 例如,长字段不能有字符串 null_value。选项 1 不适用于文本类型的字段,因为 Elasticsearch 不允许为文本类型的字段设置 null_value 参数。选项 2 也是单一且高效的解决方案,因为 1) 它不需要根据字段映射中定义的值添加 null 值的开销。2)索引大小也会变小,导致索引变少,搜索查询变快。以上就是详解如何在Elasticsearch中搜索空值的详细内容,更多关于Elasticsearch搜索空值的资料请关注脚本之家其它相关文章!
上一篇:卖保健品怎么开通抖音小店?保健食品入驻需要哪些流程?
下一篇:最后一页
最佳答案腐植酸是自然界中广泛存在的大分子有机物,是动植物遗骸,主要是植物的遗骸,经过微生物的分解和转化,以及地球化学的一系列过程造
最佳答案草豆蔻别名草蔻、大草蔻、豆蔻、漏蔻、草蔻仁、飞雷子、草果。草豆蔻来源于姜科山姜属植物,草豆蔻干燥的近成熟种子。草豆蔻味辛,
总台记者从今天(19日)举行的上海市疫情防控新闻发布会上获悉,昨天,上海全市本土确诊病例出院266例,无症状感染者解除集中隔离医学观察270
中新网成都5月19日电 (祝欢)四川省卫健委19日通报,18日0时至24时,四川新增本土确诊病例34例(广安33例),新增本土无症状感染者115例(广安
免费之旅竟是“被骗之路” 山东高青:办理一起以老年人为目标的非法吸收公众存款案 “小王对我那么好,我怎么都没想到都是假的!”日前,山
总台记者从今天(19日)举行的上海市疫情防控新闻发布会上获悉,截至5月18日24时,在定点医疗机构接受治疗的重型患者203例、危重型60例。 5月1
今天(5月19日)上午举行的上海市疫情防控工作新闻发布会上,上海市副市长张为介绍企业复工复产有关情况。 4月中旬以来,从疫情形势最为复杂严
(抗击新冠肺炎)四川广安新增2万个床位隔离点 隔离场所本周内完成交付 中新网成都5月19日电 (王爵)四川邻水县发生新冠疫情以来,牵动各方
中新网沈阳5月19日电 (李晛)据沈阳市官方18日晚发布消息,铁西区海鲜批发市场疫情关联的密接者、次密接者已全部落实分级管控措施 据通报:5
中新网西宁5月19日电(祁增蓓)19日8时07分,记者获悉,5月18日0时至24时,西宁市无新增新冠肺炎确诊病例和无症状感染者,治愈出院确诊病例2