2016-10-27 25 views
0

私は、弾性検索統合Angular js、Node.js、MongoDBで開発されたチャットアプリケーションを持っています。チャットの検索機能を提供しました。ユーザーは任意の組み合わせを入力できます。オプションはチャットメッセージ、ユーザー、日付です。と条件付きの2つのフィールドを持つmongoosastic検索

だから私は、複数のフィールドの組み合わせでnodejsの助けを借りて弾性検索のデータベースで検索したいと思います。たとえば、username = 'mohan'とdate = 'anydate'、2)username = 'mohan'、chatmessage = 'Hi there'のように1)検索します。

したがって、両方の条件を満たす結果が得られるはずです。

どのように私たちはmongoosasticを使ってこれを達成できますか?私は以下の質問で試しました。しかし、それはOR条件で結果を与えている、私はAND条件でしたい。

{ 
    "query": { 
     "bool": { 
      "should": [{ 
       "match": { 
        "feedMsg": "Hi there" 
       } 
      }, { 
       "match": { 
        "userId": 'mohan' 
       } 
      }, { 
       "range": { 
        "feedTime": { 
         "from": '27/10/2016', 
         "to": '27/10/2016' 
        } 
       } 
      }] 
     } 
    } 
} 

答えて

0

解決策が見つかりました。 Boolの質問は私のために働いている必要があります。

{ 
    "bool" : { 
     "must" :  [], 
     "should" : [], 
     "must_not" : [], 
     "filter": [] 
    } 
} 
  1. must-これらの句のすべてが一致している必要があります。 ANDと等価です。
  2. must_not - これらの句はすべて一致していてはなりません。 と等価です。
  3. should - これらの句の少なくとも1つは一致する必要があります。 ORと等価です。
  4. filter - 一致する必要がありますが、スコアリングしないモードで実行される句のフィルタモードは です。
0

あなたはこの形式を使用する必要があり、それが実際に動作する...

var query = { 
    query_string: { 
     filtered: { 
     query: { 
      multi_match: { 
      query: req.query.q, // or anything you will put here 
      } 
     }, 
     filter: { 
      term: { 
      'field': value 
      } 
     } 
     } 
    } 
    } 
関連する問題