2016-11-25 86 views
1

我使用弹性2.4和我已经写了下面的查询弹性不工作:OR和和预期

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

这是没有返回结果我的预期。它应该给我结果activities.id匹配名字或姓氏匹配。但是它会返回结果,其中activities.id匹配,忽略条件即它返回所有记录,其中activities.id与匹配名称或姓氏无关。

我从combining filters

我的查询MySQL版本所取出的参考应该是这样的: SELECT * FROM用户那里(名字,如 “%guneet%” 或姓氏,如 “%guneet%”)和activities.id = [1,2]。

任何建议,如何我可以模仿我的查询,以获得像上面的MySQL查询。

在此先感谢!

回答

0

既然你有一个bool/must条款,你需要添加一个minimum_should_match clause,它会工作:

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

这篇帮助? – Val