2017-03-16 51 views
0

我用这2个查询Elasticsearch:宜+ minimum_should_match VS必须

查询与必须

{ 
    "size": 200, 
    "from": 0, 
    "query": { 
    "bool": { 
    "must": [ { 
     "match": { 
     "_all": "science" 
     } 
    }, 
    { 
     "match": { 
     "category": "fiction" 
     } 
    }, 
    { 
     "match": { 
     "country": "us" 
     } 
    } 
    ] 
} 
} 

}

查询与宜+ minimum_required_match

{ 
    "size": 200, 
    "from": 0, 
    "query": { 
    "bool": { 
    "should": [ { 
     "match": { 
     "_all": "science" 
     } 
    }, 
    { 
     "match": { 
     "category": "fiction" 
     } 
     }, 
     { 
     "match": { 
     "country": "us" 
     } 
     } 
    ], 
    minimum_required_match: 3 
    } 
} 
} 

两个查询给测试我同样的结果,我不知道这两个之间的区别,当我们sh应该使用minimum_required_match?

+0

有没有'minimum_required_match'参数,你的意思' minimum_should_match'? – Val

+0

是的,这是最低限度_should_match,我的坏〜 – plchia

回答

0

我想你的意思是minimum_number_should_match,对吧?

在这两种情况下,它们都是相同的,因为您在should中具有相同数量的子句。当您有更多的子句时,通常会使用minimum_number_should_match

例如,如果你有5点应的条款,但由于某些原因,你只需要三个人来满足,你会做这样的事情:

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "term": { 
      "tag": "wow" 
      } 
     }, 
     { 
      "term": { 
      "tag": "elasticsearch" 
      } 
     }, 
     { 
      "term": { 
      "tag": "tech" 
      } 
     }, 
     { 
      "term": { 
      "user": "plchia" 
      } 
     }, 
     { 
      "range": { 
      "age": { 
       "gte": 10, 
       "lte": 20 
      } 
      } 
     } 
     ], 
     "minimum_should_match": 3 
    } 
    } 
} 
+0

感谢您的解释,但我仍然没有真正得到它为什么和何时使用minimum_should_match,说我有5个应该子句,并设置minimum_should_match = 2,我明白那些2匹配我可以放入必须从句,以便should子句会留下那些只应匹配的参数,在什么情况下应该应用minimum_should_match? – plchia

+0

好吧,假设你只需要满足这5个条件中的2个;如果你只是用这两个条件制定一个必须条款,你的搜索结果将会变小。 想象一下,您正在寻找具有C,C++,Java,Javascript和PHP技能的用户;但只要满足其中两个就足够了。 –

0

这是正确和理想的行为。让我们来破译它一点点:

  • must条款布尔查询是指根据must部分的所有条款都需要相匹配。就像英文一样 - 这意味着强大的义务。
  • 布尔查询与should条款意味着一些条款需要匹配,而其他条款不匹配(即软责任)。这里必须匹配的默认子句数为1,并且为了覆盖此行为,参数minimum_should_match即将发挥作用。如果指定minimum_should_match=3,则表示should下的3个子句必须匹配。从实际角度来看,它与must中的那些条款完全相同。

希望能够详细解释它。

相关问题