Bool过滤器中的弹性搜索项和范围

时间:2017-07-28 19:36:45

标签: elasticsearch elasticsearch-dsl

我正在尝试按产品类型和价格范围过滤我的商品数据。我不想对我的结果进行评分,因此它们都可以是0或1,我只需要结果集。

为什么我不能做以下事情?这看起来很合乎逻辑!

Elasticsearch版本:5.5

GET my_store/products/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
           "productType": "cooker"
        },
        "range": {
           "price": {
             "gte": 10,
             "lte": 20
            }
         }
       }
     }
   }
}

当我执行此操作时,我得到:

"[term] malformed query, expected [END_OBJECT] but found [FIELD_NAME]"

这可能意味着我在做一些语法上的错误

  1. 这不是一个逻辑结构吗?
  2. 好吧,即使这是错的,我也要适应......那么正确的语法是什么?

1 个答案:

答案 0 :(得分:0)

这应该可以解决您的问题。我假设您打算逻辑和过滤器。如果您打算对它们进行OR操作,只需更换" must" by"应该"。 一个很好的参考:https://www.elastic.co/guide/en/elasticsearch/guide/current/combining-filters.html

{
    "query": {
        "constant_score": {
            "filter": {
                "bool": {
                    "must": [
                        {
                            "term": {
                                "productType": "cooker"
                            }
                        },
                        {
                            "range": {
                                "price": {
                                    "gte": 10,
                                    "lte": 20
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}