0

我想查询我的索引,但应用 2 个过滤器。一是价格,二是地理位置。

var qobject = {
        query:{
            custom_score:{
                query:{
                    filtered:{
                        query:{
                            multi_match:{
                                query: q,
                                fields: ['title','description'],
                            }
                        },
                        filter:{
                            range:{
                                price: { from: 0, to: max_price }
                            },
                            geo_distance:{
                                'distance': distance + 'mi',
                                'location':{
                                    lat: lat,
                                    lon: lon
                                }
                            }
                        }
                    }
                },
                script: '_score + _source["price"] * 10'
            }
        }
    }

    elasticSearchClient.search('products', 'products', qobject)

如您所见,此查询对象导致错误。

但是,如果我删除 range 或 geo_distance,一切都很好!但我想要两个过滤器......

4

1 回答 1

2

使用“和”过滤器。

http://www.elasticsearch.org/guide/reference/query-dsl/and-filter.html

未经测试:

var qobject = {
        query:{
            custom_score:{
                query:{
                    filtered:{
                        query:{
                            multi_match:{
                                query: q,
                                fields: ['title','description'],
                            }
                        },
                        filter:{
                            "and" : [
                                range:{
                                    price: { from: 0, to: max_price }
                                },
                                geo_distance:{
                                    'distance': distance + 'mi',
                                    'location':{
                                        lat: lat,
                                        lon: lon
                                    }
                                }
                            ]
                        }
                    }
                },
                script: '_score + _source["price"] * 10'
            }
        }
    }

解释:“过滤查询”的“过滤器”部分实际上可以是您喜欢的任何类型的过滤器,包括“和”。一旦这个概念清晰,构建复杂的查询/过滤器就很简单了。

于 2013-03-24T11:58:46.463 回答