フィルター処理されたクエリにその用語フィルターを実際に追加する前に、検索パラメーターが空でないかどうかを確認する方法を考えていました。Elasticsearch に関する私の限られた経験から、事前に正確なクエリを作成する必要があるようです。
Node / Mongoを使用していた場合、次のようなことができることを知っています
var searchTerms = {};
if(req.body.country){
searchTerm['user.country'] = req.body.country;
}
if(req.body.company){
searchTerm['user.company'] = req.body.company;
}
if(req.body.salary){
searchTerm['user.salary'] = req.body.salary;
}
Users.find(searchTerm)
.exec(function(err, users) {
if(!err){
res.send(200, users);
}
else{
res.send(200, err);
}
});
そして、Angularでは、すべてのパラメーターが入力されている限り正しく機能するelasticsearchのクエリを作成しました。私の質問は、ユーザーが入力したパラメーターに基づいて、フィルターされたクエリを条件付きかつ動的に作成する方法だと思います.
つまり、ユーザー A は国と会社を入力しますが、給与は省略します。したがって、給与は用語フィルターとして含まれません。
client.search({
index: 'firebase',
type: 'user',
body: {
"query": {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter": {
"and": [
{
"term": { "country" : searchParameters.country }
},
{
"term": { "company" : searchParameters.company }
},
{
"term": { "salary" : searchParameters.salary }
}
]
}
}
}
よろしくお願いします!