2017-06-29 39 views
0

我正在尝试创建一个查询,它在切换到弹性搜索5后不同地匹配过滤器中的多个字段,但它们似乎没有工作。这是我认为查询应该是:ElasticSearch - 具有多个子句的已过滤查询ES 5

 query: { 
      bool: { 
       must: [{ match: { name: 'athing' }}], 
       filter: [ 
        { bool: { 
         must: [ 
          { term: { ownerId: 123} }, 
          { term: { itemId: 3453} }, 
         ] 
        }}, 
        { bool: { 
         minimum_should_match: 1, 
         must: [ 
          { term: { groupId: 123565} }, 
          { term: { groupId: 5555} }, 
         ] 
        }} 
       ] 
      } 
     } 

在这种情况下,结果必须匹配未分析的项目Id和组Id。在前面的代码中,使用了弹性搜索1.5,匹配是通过在过滤器中放置'and'和'or'集合来完成的。这似乎不工作了。

我也想让它查询能够让任何人与传递的组ID(而不是所有的人)之一。我试图在过滤器的第二个布尔查询中做到这一点。

理想的情况下,我想具有匹配“athing”的查询时,属于所有者ID 123和3453的产品ID,它是存在于任一组ID 123565或5555

回答

1

尝试

bool: 
    must: [ term: ownerId, term: itemId] 
    should: [ term: groupId, term: groupId ] 
    minimum_should_match: 1 
+0

这似乎工作,谢谢!有一个问题,根据我的理解,查询意味着结果必须至少与必须和应该相匹配。这是否意味着符合必要条件的结果,而不是任何条款可以通过的结果? –