如何用Elasticsearch实现双字段BETWEEN查询匹配3居室数据?
Elasticsearch 实现3居室区间匹配查询
要筛选出3处于bedrooms_min与bedrooms_max之间(包含等于)的记录,不能用multi_match——它是做多字段全文匹配的,没法处理数值区间的逻辑判断。你需要用bool查询结合两个range条件来实现类似BETWEEN的效果,核心就是同时满足两个逻辑:
bedrooms_min小于等于3bedrooms_max大于等于3
对应的Elasticsearch DSL查询如下:
{ "query": { "bool": { "must": [ { "range": { "bedrooms_min": { "lte": 3 } } }, { "range": { "bedrooms_max": { "gte": 3 } } } ] } } }
这个查询会精准匹配所有符合条件的记录,包括bedrooms_min=3且bedrooms_max=3(比如id=20)、bedrooms_min=2且bedrooms_max=3(比如id=25)这类边界情况,正好能返回你需要的id为20、21、22、23、24、25的结果。
内容的提问来源于stack exchange,提问作者Puneet Pandey
相关产品推荐
相关产品推荐

