elasticsearch:在给定值的给定字段上应用额外的提升

elasticsearch: applying an additional boost on a given field for a given value

我有一个使用 FOSElasticaBundle.

的 Symfony 2.7.6 应用程序

我有两种搜索类型:

  1. 一个没有关键字,在这种情况下只应用过滤器并且所有文档得分都是1(有时随机排序),在这种情况下主要查询是:

    $query = new Elastica\Query\MatchAll();
    
  2. 一个带有关键字,应用了相同的过滤器,并且匹配项再次是 运行 字段列表(具有不同的提升)。结果按分数存储。现在的主要查询是:

    $match = new Elastica\Query\MultiMatch();
    $match->setQuery($keyword);
    $match->setOperator('AND');
    $match->setFields([
        'field1^30',
        'field2',
        'field3',
        'field4',
        '_all'
    ]);
    

这 2 个搜索效果很好。

现在,对于这两个搜索,我希望对给定的字段值应用动态提升。比方说:if field5 == 'value' then add boost 15,(15只是一个例子,我们会做测试看看要选择什么额外的提升值)这里使用的值不是关键字,它是另一个参数。

我尝试了 FunctionScoreBoosting 查询,但没有成功。任何带有非常简单的弹性搜索查询的提示都将不胜感激。

这个怎么样:

{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query": "blabla",
          "operator": "AND",
          "fields": [
            "field1^30",
            "field2",
            "field3",
            "field4",
            "_all"
          ]
        }
      },
      "functions": [
        {
          "filter": {
            "term": {
              "field5": "some_value"
            }
          },
          "boost_factor": 15
        }
      ]
    }
  }
}