0

フィルター処理されたクエリにその用語フィルターを実際に追加する前に、検索パラメーターが空でないかどうかを確認する方法を考えていました。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 }
                    }
                ]
             }

       }
 }

よろしくお願いします!

4

1 に答える 1