elasticsearch - ElasticSearch:按术语查找项目,如果不存在则忽略它
问题描述
我需要按几个字段过滤项目。每个字段必须等于 value 或不存在。这个过滤器可以用下面的代码来实现,但它不起作用:
{
"query": {
"bool": {
"filter": [
{
"term": {
"$parentId": 1111
}
},
{
"terms": {
"color.keyword": [
"red",
null
]
}
},
{
"terms": {
"size.keyword": [
"6",
null
]
}
}
]
}
}
}
是否可以实现类似的工作过滤器?
解决方案
要检查字段是否存在任何值,您可以使用存在查询。由于要求字段具有特定值或字段没有值(相当于字段一定不存在),因此使用bool 查询的查询如下:
{
"query": {
"bool": {
"filter": [
{
"term": {
"$parentId": 1111
}
},
{
"bool": {
"should": [
{
"term": {
"color.keyword": 111
}
},
{
"bool": {
"must_not": {
"exist": {
"field": "color.keyword"
}
}
}
}
]
}
},
{
"bool": {
"should": [
{
"term": {
"size.keyword": 111
}
},
{
"bool": {
"must_not": {
"exist": {
"field": "size.keyword"
}
}
}
}
]
}
}
]
}
}
}
这个想法是should
需要有两个期望的条件——完全满足术语或字段不能存在。should
查询确保至少有一个条件必须匹配查询数组。
推荐阅读
- amazon-web-services - k8s - 无法拉取图像....来自守护程序的错误响应:{private_repo} 的拉取访问被拒绝,存储库不存在
- maven - 在 Maven 反应器项目中管理运行时依赖项
- java - 没有 enableDefaultTyping 的杰克逊多态性问题
- python - 如果用户输入是预定义的代码,是否有任何功能可以停止功能?
- clang - 对 MLIR 的前端支持?
- javascript - 为什么这个 div 不触发分配的 onclick() 函数?
- php - Preg_replace 多次
- python - 如何在熊猫多索引级别上按字符串值切片
- html - 如何将 HTML 上传到 GitHub
- c# - 使用 Facepunch Steamworks Wrapper P2P 连接“NoRightsToApp”错误