2016-11-25 13 views
1

を期待私は弾性2.4を使用していると私は、クエリの下に書かれているように、弾性で作業されていません。期待通りORおよびAND

"query": { 
     "bool": { 
      "should": [{ 
       "prefix": { 
        "firstname": "guneet" 
       } 
      }, { 
       "prefix": { 
        "lastname": "guneet" 
       } 
      }], 
      "must": [{ 
       "terms": { 
        "activities.id": ["1"] 
       } 
      }] 
     } 
    } 

私に結果を返すされていません。それは私にactivities.idがと一致し、ファーストネームまたはラストネームが一致する結果を与えるはずです。しかし、activities.idが一致していて結果が返ってきています。つまり、activities.idがfirstnameまたはlastnameとは無関係に一致するすべてのレコードが返されます。私は私のクエリMySQLバージョンはようにする必要がありcombining filters

からの基準をとっている

: は、ユーザーからの場所( "%のguneetの%" のような "%のguneetの%" または姓のようなファーストネーム)*選択してactivities.id = [1,2]。

私はどのように上記のmysqlクエリのようなものを得るために私のクエリを成形することができますどのような提案。

ありがとうございます!あなたがbool/must句を持っているので

答えて

0

、あなたはminimum_should_match clauseを追加する必要があり、それが動作します:

"query": { 
    "bool": { 
     "minimum_should_match": 1, 
     "should": [{ 
      "prefix": { 
       "firstname": "guneet" 
      } 
     }, { 
      "prefix": { 
       "lastname": "guneet" 
      } 
     }], 
     "must": [{ 
      "terms": { 
       "activities.id": ["1"] 
      } 
     }] 
    } 
} 
+0

この役に立ちましたか? – Val