Elasticsearch提升查询

时间:2014-09-17 17:02:45

标签: elasticsearch

我正在尝试使用Elasticsearch中的提升查询(使用Rails中的官方弹性搜索gems),如下所示:

{
  "query"=>{
    "boosting"=>{
      "positive"=>[
        {
          "filtered"=>{
            "query"=>{
              "bool"=>{
                "should"=>[
                  {
                    "match"=>{
                      "_all"=>{
                        "query"=>"Filipstad",
                        "fuzziness"=>0.7
                      }
                    }
                  }
                ],
                "minimum_number_should_match"=>1
              },
              "filter"=>{
                "terms"=>{
                  "_type"=>[
                    "article",
                    "department"
                  ]
                }
              }
            }
          }
        }
      ],
      "negative"=>[
        {
          "filtered"=>{
            "filter"=>{
              "and"=>[
                {
                  "not"=>{
                    "term"=>{
                      "department_id"=>1
                    }
                  }
                }
              ]
            }
          }
        }
      ],
      "negative_boost"=>0.1
    }
  }
}

当我运行此操作时,我收到错误[boosting] query requires 'negative' query to be set'。我无法弄清楚为什么!我有一个否定的查询?!

1 个答案:

答案 0 :(得分:0)

上述查询中存在语法错误,正面的filtered query的查询部分缺少括号

以下内容应该在语法上正确,

{
  "query"=>{
    "boosting"=>{
      "positive"=>[
        {
          "filtered"=>{
            "query"=>{
              "bool"=>{
                "should"=>[
                  {
                    "match"=>{
                      "_all"=>{
                        "query"=>"Filipstad",
                        "fuzziness"=>0.7
                      }
                    }
                  }
                ],
                "minimum_number_should_match"=>1
              }
            },
            "filter"=>{
              "terms"=>{
                "_type"=>[
                  "article",
                  "department"
                ]
              }
            }
            }
          }
      ],
      "negative"=>[
        {
          "filtered"=>{
            "filter"=>{
              "and"=>[
                {
                  "not"=>{
                    "term"=>{
                      "department_id"=>1
                    }
                  }
                }
              ]
            }
          }
        }
      ],
      "negative_boost"=>0.1
    }
  }
}

但是我应该指出,负升压部分中的滤波查询可以进一步简化。