Elasticsearch低于现有领域

时间:2017-05-16 07:48:23

标签: elasticsearch

我有以下弹性搜索结构

[{product: 'product 1', price: 100, originalPrice: 150}]

如何查询这样的查询(sql):select * from products where price < originalPrice以查找所有具有折扣的产品

1 个答案:

答案 0 :(得分:1)

硬核非最佳表现不佳的方法是使用这样的script query

POST /_search
{
    "query": {
        "bool" : {
            "must" : {
                "script" : {
                    "script" : {
                        "inline": "doc.price.value < doc.originalPrice.value",
                        "lang": "painless"
                     }
                }
            }
        }
    }
}

更好的方法是在新的布尔字段中将该信息索引到文档中,即在您的情况下为"discounted": true

{ 
    "product": "product 1", 
    "price": 100, 
    "originalPrice": 150,
    "discounted": true
}

然后,它会变得更容易,并且可以进行简单的term查询,此外,查询运行得更快。

POST /_search
{
    "query": {
        "bool" : {
            "must" : {
                "term" : {
                    "discounted" : true
                }
            }
        }
    }
}