弹性搜索:查询新添加的字段

时间:2019-07-16 17:12:05

标签: elasticsearch

我在数据库中添加了一个新字段(假设vendor_id,默认值为0)。因此,此字段未在Elasticsearch的先前添加的项目中建立索引。但是现在我必须基于此键执行查询。所以,

  1. 如果用户使用vendor_id = n(n> 0)搜索,则应搜索它具有键vendor_id,并且其值等于n。

    < / li>
  2. 如果用户使用vendor_id = 0搜索,则应该搜索它没有键vendor_id,或者如果存在vendor_id键,则其值为等于0。

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "vendor_id":n
          }
        }
      ]
    }
  }
}

2 个答案:

答案 0 :(得分:0)

您可以使用exists queries测试字段中是否存在值。

您可能必须在生成Elasticsearch查询的代码中实现一些需求逻辑(即情况1和2是不同的Elasticsearch查询)。

答案 1 :(得分:0)

Boolean Query进行了一些研究之后,我找到了解决该问题的方法。

  1. 如果用户使用vendor_id = n(n> 0)进行搜索,则应该搜索它具有键vendor_id,并且其值等于n。
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "vendor_id":n
          }
        }
      ]
    }
  }
}
  1. 如果用户使用vendor_id = 0进行搜索,则应该搜索它没有键vendor_id,或者如果存在vendor_id键,则其值等于0。
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "vendor_id":0
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "exists": {
                  "field": "vendor_id"
                }
              }
            ]
          }
        }
      ],
      "minimum_should_match" : 1
    }
  }
}