Bool 过滤器中的 Elasticsearch 术语和范围
Elasticsearch Term and Range in Bool Filter
我正在尝试按产品类型和价格范围过滤我的产品数据。我不想对我的结果进行评分,因此它们都可以是 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]"
这大概意味着我在做一些语法错误的事情
- 这不符合逻辑结构吗?
- 好吧,就算错了,我也得去适应……那么正确的语法是什么?
这应该可以解决您的问题。我假设您的意思是在逻辑上与过滤器。如果您想对它们进行 OR,只需将 "must" 替换为 "should"。
一个很好的参考: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
}
}
}
]
}
}
}
}
}
我正在尝试按产品类型和价格范围过滤我的产品数据。我不想对我的结果进行评分,因此它们都可以是 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]"
这大概意味着我在做一些语法错误的事情
- 这不符合逻辑结构吗?
- 好吧,就算错了,我也得去适应……那么正确的语法是什么?
这应该可以解决您的问题。我假设您的意思是在逻辑上与过滤器。如果您想对它们进行 OR,只需将 "must" 替换为 "should"。 一个很好的参考: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
}
}
}
]
}
}
}
}
}