【问题标题】:Elasticsearch Term and Range in Bool Filter布尔过滤器中的 Elasticsearch 术语和范围
【发布时间】:2017-07-29 06:07:03
【问题描述】:

我正在尝试按产品类型和价格范围过滤我的产品数据。我不想给我的结果打分,所以它们都可以是 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. 好吧,就算是错的,我也得适应……那么正确的语法是什么?

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl


    【解决方案1】:

    这应该可以解决您的问题。我假设您打算在逻辑上对过滤器进行 AND 操作。如果您打算对它们进行 OR,只需将“必须”替换为“应该”即可。 一个很好的参考: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
                                    }
                                }
                            }
                        ]
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多