0

インデックスにクエリを実行したいのですが、2 つのフィルターを適用します。1つ目は価格、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

「and」フィルターを使用します。

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'
            }
        }
    }

説明: 「フィルター処理されたクエリ」の「フィルター」部分は、実際には、「and」を含む任意のタイプのフィルターにすることができます。その概念が明確になると、複雑なクエリ/フィルターを構築するのは非常に簡単です。

于 2013-03-24T11:58:46.463 に答える