我在数据库中添加了一个新字段(假设vendor_id
,默认值为0
)。因此,此字段未在Elasticsearch的先前添加的项目中建立索引。但是现在我必须基于此键执行查询。所以,
如果用户使用vendor_id
= n(n> 0)搜索,则应搜索它具有键vendor_id
,并且其值等于n。
如果用户使用vendor_id
= 0搜索,则应该搜索它没有键vendor_id
,或者如果存在vendor_id
键,则其值为等于0。
{
"query": {
"bool": {
"must": [
{
"term": {
"vendor_id":n
}
}
]
}
}
}
答案 0 :(得分:0)
您可以使用exists
queries测试字段中是否存在值。
您可能必须在生成Elasticsearch查询的代码中实现一些需求逻辑(即情况1和2是不同的Elasticsearch查询)。
答案 1 :(得分:0)
对Boolean Query进行了一些研究之后,我找到了解决该问题的方法。
{
"query": {
"bool": {
"must": [
{
"term": {
"vendor_id":n
}
}
]
}
}
}
{
"query": {
"bool": {
"should": [
{
"term": {
"vendor_id":0
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "vendor_id"
}
}
]
}
}
],
"minimum_should_match" : 1
}
}
}