在Elasticsearch查询

时间:2017-05-09 06:34:41

标签: elasticsearch

以下是弹性搜索查询。我需要在查询中使用范围和缺失。如何更改以下查询

     {
  "query": {
    "bool": {
      "must": [
        {
          "constant_score": {
            "filter": {
              "missing": {
                "field": "url"
              }
            }
          }
        }
      ],
      "should": []
    }
  },
  "_source": [
    "id",
    "com_name",
    "website",
    "_foundation._rating"
  ]
}

我需要在上面的查询中添加范围。请帮我将以下部分添加到上述查询

"range": {
      "_foundation._rating": {
        "gte": 1,
        "lte": 4
      }

2 个答案:

答案 0 :(得分:0)

我怀疑您需要的查询如下,即url字段必须丢失且_foundation._rating字段必须介于1和4之间(包括):

{
  "query": {
    "bool": {
      "must": [
        {
          "missing": {
            "field": "url"
          }
        },
        {
          "range": {
            "_foundation._rating": {
              "gte": 1,
              "lte": 4
            }
          }
        }
      ]
    }
  },
  "_source": [
    "id",
    "com_name",
    "url",
    "_foundation._rating"
  ]
}

答案 1 :(得分:0)

根据弹性搜索的版本,如果使用5.x,则必须在must_not子句中使用exists。 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html

尝试以下查询:

{
    "query": {
        "range": {
            "bool": {
                "must": [
                    {
                        "term": {
                            "_foundation._rating": {
                                "gte": 1,
                                "lte": 4
                            }
                        }
                    }
                ],
                "must_not": {
                    "exists": {
                        "field": "url"
                    }
                }
            }
        }
    }
}