elasticsearch - Elastic Search 必须 + 至少一个过滤器查询中的 SHOULD

标签 elasticsearch elasticsearch-percolate

我试图根据几个因素向用户提出建议:

•建议只能是同一所大学的学生 •建议必须至少匹配一个其他字段

我以为我有它,但问题是这个查询将返回同一所学校的所有学生,而不管其他情况:

PUT /user/.percolator/4
{
  "query": {
    "bool": {
    "must": [
        { "match": { "college":{
            "query" : "Oakland University",
            "type" : "phrase"
        }}}
    ],
      "should": [

            { "match": { "hashtag": "#chipotle" }},
            { "match": { "hashtag": "#running"}},
            { "match": { "college_course": "ART-160" }}

      ]
    }
  }
}

POST /user/stuff/_percolate/
{  
  "doc":{  

    "college":"Oakland University",
    "college_course": "WRT BIO MTH-400"


  }
}

最佳答案

这是因为 should 和 must 的行为在同一个 bool 查询中。默认情况下,不需要匹配任何“should”子句,除非您的 bool 仅包含“should”子句,否则它至少需要匹配一个子句。

要解决您的问题,您只需在 bool 查询中添加 "minimum_should_match": 1 :)

关于elasticsearch - Elastic Search 必须 + 至少一个过滤器查询中的 SHOULD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32221873/

相关文章:

java - elasticsearch 选择哪个字段用于 boost

django - Django干草堆Elasticsearch的自动完成问题(以及带有大写字母的查询)

ruby-on-rails - Rails 4:安装elasticsearch和searchkick时出错

c# - 使用 NEST 渗透

python - Elasticsearch Percolate查询没有命中

elasticsearch - 搜索查询到.percolator类型

node.js - match_phrase 不适用于 Elasticsearch 中的同义词标记过滤器(类型扩展)

python - 将消息从发布/订阅发送到Elasticsearch

python - 带有 python api 的 Elasticsearch Percolator

elasticsearch - Elasticsearch percolate函数中的搜索选项