1

我有一个使用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'
    ]);
    

这两个搜索运行良好。

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

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

4

1 回答 1

1

这个怎么样:

{
  "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
        }
      ]
    }
  }
}
于 2015-11-16T22:37:22.180 回答